perm filename CKP2.MAC[2,ALS] blob sn#201653 filedate 1971-05-21 generic text, type T, neo UTF8
00010		TITLE	CKP   	CHECKERS	5/19/71
00020	SUBTTL	PLAY -- A. SAMUEL
00030
00040	;****************************************************
00050	;   PLAY CONTAINS THOSE ESSENTIAL SET-UP PROCEDURES *
00060	; TO INITIATE PLAY. IT RESTORES ALL NECESSARY       *
00070	; REGISTERS, CLEARS WORKING SPACES TO THE EXTENT    *
00080	; NECESSARY AND IT ACCEPTS AN INPUT BOARD OR STARTS *
00090	; A NEW GAME. IT CALLS ON GET TO GET PLAY STARTED.  *
00100	;****************************************************
00110	
00120
00130	;         REGISTER ASSIGNMENTS
00140	;ASSIGNMENT	USAGE
00150	Z=0
00160	X1=1	;	INDEX MAIN
00170	U1=2
00180	X2=3	;	INDEX PATH
00190	U2=4
00200	X3=5	;	INDEX PLAUS
00210	U3=6
00220	X4=7	;	INDEX TWIG
00230	U4=10
00240	X5=11	;	PASS COLOR
00250	U5=12
00260	Q=13
00270	A=14	;	ACTIVE
00280	P=15	;	PASSIVE
00290	K=16	;	KINGS
00300	PDP=17	;	PUSHJ
00310	I=Q
00320
00330
00340		OPDEF	TTYUUO	[51B8]
00350
00360		INTERN	ACCEPT,BDOUT,BOUT,CDIFF,CRFST,CRUNT,CSFLAG,CTELLC,CTOTAL
00370		INTERN	D,DEBUG,DIFF,FSTCR,GO,LEGM,LPTREE,MOVIN,MESS,FINDM,IA
00380		INTERN	PB,PC,PLAYBS,PW,RUNT,SETB,SETW,SETPAR,IP,IK,MOVOUT,MOVES
00390		INTERN	TELLC,TELPAR,TOTAL,TREE,TRESET,W,CORR,FIND,RECIN,SUM
00400		INTERN	EXIT1,MOP,MOVX,LABEL
00410	INTERN	INPSIZ,INPA,INPP,INPK,BOOKA,BOOKP,BOOKK,BOOKI,BOOKM
00420	EXTERN	FINDFI,FINDX1,X4NORM,X4ALL,X4TAB,CRIP,REVERA,REVERP,REVERK,TLIST
00430		EXTERN	CFLAG,NOTICE,DATE,WHERE,PHASE
00440		EXTERN	OUTIN,TA,TP,TK,PLY,RJ2,RJ4,USEBOK,PCCNT
00450		EXTERN	ACSAV,BAD,BEGIN,BEST,BEST2,BESTM,BESTO
00460		EXTERN	BPBP,COLOR,COUNT,COUNTS,DECIN,DOTFLG,DWFLAG
00470		EXTERN	EEB,EEB2,EOL,ERR,FLAG,GOOD
00480		EXTERN	INTERP,LASCAR,LASTP,LEGAL,LOSE
00490		EXTERN	LPFLAG,LPTFIX,LRPDL,MJ,MJBP,MJW,MTYPE,NOYES,NUMOUT
00500		EXTERN	OA,OCT2,OCTIN,OCTOUT,OJ,OK,OLB,OLF,OP,ORDER,ORDER2,ORF
00510		EXTERN	PLA,PLAS,PLFLG,PLK,PLKS,PLLB,PLLBS,ORB
00520		EXTERN	PLLF,PLLFS,PLMJS,PLP,PLPS,PLRB,PLRBS,PLRF,PLRFS,PLSKIP,PLSKS
00530		EXTERN	PRINT,PRUNE,PUP,RJOUT,S,SAVE,SCAN,SCORE,SFLAG,SI
00540		EXTERN	SIDE,STOP,TAPER,TERPRI,TISKIP,TRUNK,TYI,TYO,U2S,U2SS,UPDATE
00550		EXTERN	WIDTH,WIN,WORSTM,X1S,X2S,X2SS,X4S,XTWIG,ZS,ZZ,PHASEV,KSTART
00551
00552	;THESE DEFINITIONS NEEDED TO DEFINE UNUSED GLOBALS
00553		EXTERN	NOTICE
00554		INTERN	ZL,LZERO,BEGINL,BEGL3,SYM,LCONTZ,DIVIDE,LCONTS
00555		INTERN	TRNKNO,LBYT,LFLAG,SIG,HEADFL
00556	
00557	ZL:
00558	LZERO:
00559	BEGINL:
00560	BEGL3:
00561	SYM:
00562	LCONTZ:
00563	LCONTS:
00565	DIVIDE:	JRST	NOTICE
00566	TRNKNO:
00567	LBYT:
00568	LFLAG:	Z
00569	
00570	PSHIFT=3		;ALLOWANCE FOR PLY IN X2
00580	PSIZE=10		;PLY VALUE IN MAIN
00590	PMASK=7			;MASK FOR PLY IN X2
00600	
00602	HEADFL:	Z
00606	
00610	PLAY:	SKIPN	TREE
00620		JRST	PLAY1
00630		SETOM	PRFLG
00640		PUSHJ	PDP,DATE
00650		PUSHJ	PDP,TERPRI
00660		MOVEI	U1,[ASCIZ / /]
00670		MOVEM	U1,DOTFLG
00680		PUSHJ	PDP,TERPRI
00690		MOVEI	U1,[ASCIZ /MOVE /]
00700		PUSHJ	PDP,PRINT
00710		MOVE	U1,SI
00720		PUSHJ	PDP,NUMOUT
00730		MOVEI	U1,[ASCIZ /, PDP-/]
00740		PUSHJ	PDP,PRINT
00750		PUSHJ	PDP,MTYPE
00760		PUSHJ	PDP,NUMOUT
00770		MOVEI	U1,[ASCIZ / PLAYING /]
00780		PUSHJ	PDP,PRINT
00790		MOVEI	U1,[ASCIZ /BLACK./]
00800		SKIPE	SIDE
00810		MOVEI	U1,[ASCIZ /WHITE./]
00820		PUSHJ	PDP,PRINT
00830		PUSHJ	PDP,TERPRI
00840		PUSHJ	PDP,TELPAR
00850		PUSHJ	PDP,BOUT
00860	PLAY1:	MOVEI	U1,MA
00870		SETZM	(U1)
00880		CAIGE	U1,BZ+17
00890		AOJA	U1,PLAY1+1
00900		MOVE	Z,PLAUSD
00910		MOVEM	Z,PLDPT
00920		SETZB	X1,FLIT
00930		SETZM	STEM
00940		SETZM	TIPPLY		;X2 OK INITIALLY
00950		SETZB	X2,BPTR-1
00960		SETZM	U2MAX
00970		MOVE	U1,DEPTH
00980		LSH	U1,3
00990		MOVEM	U1,DEPTHM
01000		MOVEM	U1,DEPTHZ
01010		SETZB	X3,MA
01020		SETZB	X4,COUNT
01030		MOVE	U1,TIMEX
01040		LSH	U1,11
01050		MOVEM	U1,COUNTM
01060		SETZM	COUNTZ	;USED AS TEST FIRST TIME
01070		SETZB	U1,U2
01080		SETZB	U3,U4
01090		MOVEI	U5,17
01100		SETZM	PLA(U5)		;CLEAR PLAUS SPACE
01110		SOJGE	U5,.-1
01120		MOVE	Z,WIN
01130		MOVEM	Z,FLZZ
01140		MOVE	U5,[XWD FLZZ, FLZZ+1]
01150		BLT	U5,FLZZ+17	;WINS TO CAUSE INITIAL FLITTING
01160		MOVEM	Z,BEST
01170		MOVEM	Z,BEST2
01180		MOVE	Z,LOSE		;RESTORE ALL SCORE VALUES
01190		MOVEM	Z,SCORE
01200		MOVEI	U2,PSIZE-1
01210		MOVEM	Z,S(U2)
01220		MOVEM	Z,PRUZ(U2)
01230		SOJGE	U2,.-2
01240		MOVEI	U1,1
01250		MOVEI	U2,PSIZE*14-PSIZE
01260		SETOM	PLY-2(U2)
01270		SETZM	PLY-1(U2)
01280		MOVEM	U1,PSKIP-1(U2)
01290		MOVEM	U1,PLY(U2)
01300		MOVEM	U1,PSKIP(U2)
01310		SUBI	U2,PSIZE
01320		JUMPGE	U2,.-6
01330		MOVEM	A,IA		;SAVE IN INITIAL BOARD SPACE
01340		MOVEM	A,PLA(X3)	;ALSO GET READY FOR LEGAL
01350		MOVEM	P,IP
01360		MOVEM	P,PLP(X3)
01370		MOVEM	K,IK
01380		MOVEM	K,PLK(X3)
01390		MOVEM	K,KSTART
01400		PUSHJ	PDP,PHASEV
01405		PUSHJ	PDP,PHASFI
01410		MOVE	U1,SIDE
01420		MOVEM	U1,COLOR
01430		SETZ	X3,
01440		MOVE	U2,BTERMS
01450		SKIPE	COLOR
01460		MOVE	U2,WTERMS
01470		MOVEM	U2,CFLAG
01480		PUSHJ	PDP,LEGAL	;FIND LEGAL MOVES
01490		JRST	LOST		;GAME IS LOST
01500		AOJA	X3,.+10
01510		ADDI	X3,1
01520		MOVE	Z,EEB
01530		MOVEM	Z,EEB-1
01540		MOVEM	Z,EEB-2
01550		MOVE	Z,EEB2
01560		MOVEM	Z,EEB2-1
01570		MOVEM	Z,EEB2-2
01580		SKIPE	USEBOK
01590		PUSHJ	PDP,X4NORM
01600		SETZM	GETF1		;RESET GET FLAG 1 FOR OVER 8
01610		SETZM	GETF2		;RESET GET FLAG 2
01620		SETZB	X4,ORDER
01630		SETZM	ORDER2
01640		PUSHJ	PDP,GET		;GET FIRST 12 TRUNKS
01650		SOJE	X4,EXIT1+1	;SINGLE MOVE ESCAPE
01660		JUMPL	X4,BEGIN
01670		MOVE	A,IA
01680		MOVE	P,IP
01690		MOVE	K,IK
01700		SKIPE	USEBOK
01710		PUSHJ	PDP,FINMOV	;SEE IF BOOK MOVE IS SAVED
01720		SKIPN	TREE
01730		JRST	PLAY2
01740		MOVEI	U1,[ASCIZ /STARTING WITH TRUNK /]
01750		PUSHJ	PDP,PRINT
01760		MOVE	U1,X4
01770		ADDI	U1,1
01780		CAILE	U1,10
01790		MOVEI	U1,10
01800		PUSHJ	PDP,NUMOUT
01810		MOVEI	U1,[ASCIZ /								     FOR PDP-/]
01820		PUSHJ	PDP,PRINT
01830		PUSHJ	PDP,MTYPE
01840		PUSHJ	PDP,NUMOUT
01850		MOVEI	U1,[ASCIZ /:    MIN   SCORE     MAX/]
01860		PUSHJ	PDP,PRINT
01870		PUSHJ	PDP,TERPRI
01880	PLAY2:	MOVEI	U2,PSIZE*14-PSIZE
01890		MOVEM	X4,BRUSH(U2)
01900		MOVEM	X4,BRUSH+1(U2)
01910		SUBI	U2,PSIZE
01920		JUMPGE	U2,.-3
01930		SETZB	X1,X2
01940		SETZ	X3,
01950		MOVE	U2,ORDER
01960		LSHC	X2,4		;GET FIRST TRUNK
01970		SUBI	X2,1
01980		MOVEM	U2,ORDER	;RESTORE
01984		MOVE	Z,GTCNT(X2)
01988		MOVEM	Z,GTCNT0
01990		LSH	X2,3
02000		MOVEM	X2,TRUNK	;NEEDED FLPERX
02010		AOJA	X2,PL1
02020
     

00010	SUBTTL	GET -- A. SAMUEL
00020	PAGE
00030	;*****************************************************
00040	;	GET IS A SUBROUTINE WHICH GETS PLAY STARTED  *
00050	; ON DIFFERENT TRUNKS SO THAT PLAUS CAN TAKE OVER.   *
00060	; IT IS CALLED INITIALLY BY PLAY, TO ESTABLISH 8     *
00070	; TRUNKS AND AGAIN LATER BY SORT TO GET ADDITIONAL   *
00080	; TRUNKS IF THEY EXIST.                              *
00090	;*****************************************************
00100
00110	GET:	MOVEI	X2,-2
00120		PUSHJ	PDP,PUP
00130		POPJ	PDP,		;ALL TRUNKS FOUND, LEAVE GET
00140		MOVEM	A,PLA(X3)
00150		MOVEM	P,PLP(X3)
00160		MOVEM	K,PLK(X3)
00170		MOVEM	A,MOA(X4)	;SAVE IN MOVE SPACE
00180		MOVEM	P,MOP(X4)
00190		MOVEM	K,MOK(X4)
00200		PUSHJ	PDP,FINDM
00210		SKIPE	TREE
00220		PUSHJ	PDP,GTREE
00230		SETZM	MOJ(X4)
00240		PUSHJ	PDP,LEGAL	;FIND MOVES
00250		JRST	WON		;WINNING FIRST MOVE FOUND
00260		PUSHJ	PDP,GET1A	;JUMP MOVE
00270		MOVE	Z,PLRF(X3)	;SAVE MOVE VECTORS
00280		MOVEM	Z,MORF(X4)
00290		MOVE	Z,PLLF(X3)
00300		MOVEM	Z,MOLF(X4)
00310		MOVE	Z,PLLB(X3)
00320		MOVEM	Z,MOLB(X4)
00330		MOVE	Z,PLRB(X3)
00340		MOVEM	Z,MORB(X4)
00350		ADDI	X3,1		;INDEX
00360		MOVE	X1,X4		;GET TRUNK INDEX
00370		LSH	X1,PSHIFT+3	;TO INDEX MAIN
00380		MOVE	U4,X4
00390		LSH	U4,3		;TO INDEX OVERFLOW
00400		MOVEM	U4,TRUNK
00410		SETZM	OVA(U4)		;TRASH GUARD
00420		SETZM	GETCNT#		;TO COUNT BOARDS
00430	GET2:	PUSHJ	PDP,PUP		;NOW CONTINUE
00440		JRST	GET4		;NO MORE BRANCHES
00450		MOVE	Z,GETCNT
00460		CAIL	Z,10		;WHERE TO
00470		JRST	GET3		;TO OVERFLOW
00480		MOVE	Z,MOA(X4)
00490		MOVEM	Z,MMOVA(X1)
00500		MOVEM	P,MMOVP(X1)
00510		MOVEM	A,MA(X1)
00520		MOVEM	P,MP(X1)
00530		MOVEM	K,MK(X1)
00540		PUSHJ	PDP,LEGAL
00550		JRST	GET1Z		;NO MOVES, SO DISCARD TRUNK
00560		PUSHJ	PDP,GET2A
00570		MOVE	Z,PLRF(X3)
00580		MOVEM	Z,MRF(X1)
00590		MOVE	Z,PLLF(X3)
00600		MOVEM	Z,MLF(X1)
00610		MOVE	Z,PLLB(X3)
00620		MOVEM	Z,MLB(X1)
00630		MOVE	Z,PLRB(X3)
00640		MOVEM	Z,MRB(X1)
00650		MOVEI	Z,1
00660		MOVEM	Z,MSKIP(X1)
00670		MOVE	Z,EEB(X3)	;START ME OFF RIGHT
00680		MOVEM	Z,ME(X1)
00690		MOVE	Z,EEB2(X3)
00700		MOVEM	Z,ME2(X1)
00710		ADDI	X1,1
00720		AOS	GETCNT
00730		JRST	GET2
00740	GET1Z:	SKIPN	TREE
00750		JRST	GET4B
00760		MOVEI	U1,[ASCIZ /IGNORE THIS TRUNK/]
00770		PUSHJ	PDP,PRINT
00780		PUSHJ	PDP,TERPRI
00790		JRST	GET4B
00800
00810	GET1A:	SETOM	MOJ(X4)
00820	GET2A:	MOVE	Z,EEB-2(X3)
00830		MOVEM	Z,EEB(X3)
00840		MOVE	Z,EEB2-2(X3)
00850		MOVEM	Z,EEB2(X3)
00860		POPJ PDP,
00870
00880	GET3:	MOVE	Z,GETCNT
00890		CAIG	Z,10
00900		MOVE	X1,TRUNK
00910		MOVE	Z,MOA(X4)
00920		MOVEM	Z,OVMOVA(X1)
00930		MOVEM	P,OVMOVP(X1)
00940		MOVEM	A,OVA(X1)
00950		MOVEM	P,OVP(X1)
00960		MOVEM	K,OVK(X1)
00970		PUSHJ	PDP,LEGAL
00980		SOJA	X3,GET		;NO MOVES, DISCARD TRUNK
00990		PUSHJ	PDP,GET2A
01000		MOVE	Z,PLRF(X3)
01010		MOVEM	Z,OVRF(X1)
01020		MOVE	Z,PLLF(X3)
01030		MOVEM	Z,OVLF(X1)
01040		MOVE	Z,PLLB(X3)
01050		MOVEM	Z,OVLB(X1)
01060		MOVE	Z,PLRB(X3)
01070		MOVEM	Z,OVRB(X1)
01080		MOVEI	Z,1
01090		MOVEM	Z,OVSKIP(X1)
01100		MOVE	Z,EEB(X3)
01110		MOVEM	Z,OVE(X1)
01120		MOVE	Z,EEB2(X3)
01130		MOVEM	Z,OVE2(X1)
01140		ADDI	X1,1
01150		SETZM	OVA(X1)
01160		AOS	GETCNT
01170		JRST	GET2
01180
01190	GET4:	MOVE	Z,GETCNT
01200		CAIGE	Z,10		;HOW MANY BRANCHES
01210		SETZM	MA(X1)		;SET STOP IN MAIN IF NEEDED
01213		SUBI	Z,1
01216		MOVEM	Z,GTCNT(X4)	;USED IN SET AFTER MOVEM GTCNT0
01220		MOVE	U3,X4
01230		ADDI	X4,1
01240		CAIG	X4,10		;PUT WHERE
01250		JRST	.+5		;INTO ORDER
01260		MOVE	U4,ORDER2
01270		LSHC	X4,-4
01280		MOVEM	U4,ORDER2
01290		JRST	.+4
01300		MOVE	U4,ORDER	;NOW FIX ORDER
01310		LSHC	X4,-4
01320		MOVEM	U4,ORDER	;SAVE ORDER
01330		MOVE	X4,U3		;RESTORE X4
01340		LSH	U3,PSHIFT		;GET INTO X2 FORM
01350		ADDI	U3,1		;SET PLY VALUE
01360		MOVEM	U3,FLX2(X4)	;SET UP FOR FLITTING
01370	GET4B:	ADDI	X4,1
01380		SKIPE	GETF2		;IS THIS A FIRST PASS
01390		JRST	GET4A		;YES
01400		CAIGE	X4,14		;CHANGED FOR 12 TRUNKS
01410		SOJA	X3,GET		;SAFE TO GO ON
01420	GET4A:	SETZM	GETF1
01430		SKIPE	PLRF-2(X3)
01440		JRST	GET5
01450		SKIPE	PLLF-2(X3)
01460		JRST	GET5
01470		SKIPE	PLLB-2(X3)
01480		JRST	GET5
01490		SKIPN	PLRB-2(X3)
01500		POPJ	PDP,		;NO MORE MOVES
01510
01520	GET5:	SETOM	GETF1		;OVER 12 SO SET FLAG AND SAVE
01530		MOVE	PLA-2(X3)
01540		MOVEM	PLAS
01550		MOVE	PLP-2(X3)
01560		MOVEM	PLPS
01570		MOVE	PLK-2(X3)
01580		MOVEM	PLKS
01590		MOVE	PLSKIP-2(X3)
01600		MOVEM	PLSKS
01610		MOVE	PLRF-2(X3)
01620		MOVEM	PLRFS		;SAVE FOR FUTURE USE
01630		MOVE	PLLF-2(X3)
01640		MOVEM	PLLFS
01650		MOVE	PLLB-2(X3)
01660		MOVEM	PLLBS
01670		MOVE	PLRB-2(X3)
01680		MOVEM	PLRBS
01690		MOVE	MJW-2(X3)
01700		MOVEM	PLMJS
01710		POPJ	PDP,		;MUST RETURN
01720	GETF1:	Z			;MORE THAN 8 TRUNK FLAG
01730	GETF2:	Z			;SECOND TIME IN FLAG
01740	GETF3:	Z			;NEW TRUNK FLAG
01750
01760
01770	SUBTTL	SET -- A. SAMUEL
01780	PAGE
01790	;********************************************************
01800	;	SET IS USED TO SET-UP CONDITIONS FOR PLAUS      *
01810	; AFTER A BACK UP HAS OCCURRED.  IT ALSO CONTAINS THE   *
01820	; NECESSARY PROVISIONS FOR STILL FURTHER BACKING UP     *
01830	; WHEN EMPTY BPTR WORDS ARE ENCOUNTERED, AND FOR        *
01840	; SWITCHING TRUNKS WHEN THEY ARE EXHAUSTED.             *
01850	;********************************************************
01860
01870	SET:	SETZM	MJW-1		;SAFETY PRECAUTION
01880		SETZM	TIPPLY		;RESTORE FOR U2 LESS THAN 10
01890		MOVE	U4,TRUNK
01900		SETZB	X1,OVA(U4)
01910		SETZM	BPTR-1(X2)	;CLEAN UP TRASH
01920		SUBI	X2,1
01930		SKIPN	U1,BPTR-1(X2)	;NEW BRANCH NUMBER
01940		JRST	SET10		;NO MORE BOARDS AT THIS LEVEL
01950		SETOM	STEM
01960		TRNN	X2,PMASK-1	;FULL DEPTH ON FIRST REPLY
01970		SETZM	STEM
01980		MOVE	X3,PLAYD
01990		MOVEM	X3,PLDPT
02000		MOVE	X3,X2
02010		LSH	X3,3
02020		LSHC	X1,4
02030		JUMPN	X1,.+4		;DIRTY BPTR?
02040		MOVEI	U1,[ASCIZ /DIRTY BPTR./]
02050		PUSHJ	PDP,PRINT
02060		JRST	SET10
02070		SUBI	X1,1
02080		IOR	X1,X3
02090		MOVEM	U1,BPTR-1(X2)	;REPLACE REMAINING
02120		MOVE	U2,X2
02130		ANDI	U2,PMASK
02131		CAILE	U2,2
02132		JRST	.+4		;CONSIDER PRUNING
02133		SKIPLE	GTCNT0		;TEST FOR JUMP REPLY
02134		CAIG	U2,1
02135		JRST	SET0B		;DO NOT PRUNE
02140		MOVE	Z,S-1(U2)
02150		CAMG	Z,PRUZ-1(U2)
02160		JRST	SET0A
02170		MOVEM	Z,PRUZ-1(U2)
02172		MOVE	Z,PRUCT-1(U2)
02174		MOVEM	Z,PRUC-1(U2)
02176		JRST	SET0B		;OK
02178	
02180	PRUCT:	3		;PRUNING COUNT TABLE
02182		2		;N+1 BRANCHES TRIED
02184		1
02186		1
02188		1
02190		1
02192		1
02194		1
02196		1
02199	
02200	SET0A:	SOSGE	PRUC-1(U2)	;IS IT TIME TO PRUNE
02210		JRST	SET10		;YES
02220	SET0B:	MOVE	U1,MSKIP-10(X1)	;THIS ESTABLISHES RELATION BETWEEN PSKIP AND MSKIP
02230		MOVEM	U1,PSKIP-1(X2)
02240		ADD	U1,PLY-1(X2)
02250		MOVEM	U1,PLY(X2)	;SET NEW BASE PLY
02260		XOR	U1,SIDE		;CLEAN UP COLOR
02270		ANDI	U1,1
02280		MOVE	Z,ME-10(X1)
02290		MOVEM	Z,EEB-1
02300		MOVEM	Z,EEB-2		;PREPARATION FOR BACKUP IN PLAUS
02310		MOVE	Z,ME2-10(X1)
02320		MOVEM	Z,EEB2-1
02330		MOVEM	Z,EEB2-2	;DITTO
02340		TRC	U1,1
02350		MOVEM	U1,COLOR	;SET NEW BASE COLOR
02360		SKIPE	TREE
02370		PUSHJ	PDP,STREE
02380		SETZ	X4,		;NEEDED LATER TO COUNT BOARDS
02390		MOVE	U2,X2
02400		ANDI	U2,PMASK
02410		MOVE	U1,PSKIP-1(X2)
02420		TRNE	U1,1
02430		JRST	SET1A
02440		MOVE	Z,S-1(U2)	;OK FOR EVEN SKIP
02450		JRST	SET1B
02460
02470	;ODD PSKIP CASE
02480	SET1A:	MOVE	U3,X2
02490		MOVE	U1,PSKIP-2(U3)
02500		TRNN	U1,1
02510		SOJA	U3,.-2		;ODD ONE EXISTS
02520		ANDI	U3,PMASK
02530		MOVE	Z,S-2(U3)
02540	SET1B:	MOVEM	Z,S(U2)
02550		MOVE	U1,X2		;NEED SECOND X1
02560		LSH	U1,3		;SIMULATE X1
02570		MOVEM	U1,X1SET#
02580		SKIPA
02590	SET1:	EXCH	X1,X1SET
02600		SETZ	X3,
02610		PUSHJ	PDP,MUP
02620		JRST	SET6		;NO MORE MOVES
02630		EXCH	X1,X1SET
02640		MOVEM	P,MOVPP
02650	SET2:	MOVEM	A,PLA(X3)
02660		MOVEM	P,PLP(X3)
02670		MOVEM	K,PLK(X3)
02680		PUSHJ	PDP,LEGAL
02690		JRST	SET7		;NO LEGAL MOVES
02700		AOJA	X3,SET2B	;JUMP RETURN
02710		ADDI	X3,1
02720	SET2A:	SETZM	SETC#		;TO COUNT MOVES
02730		SKIPE	U1,PLRF-1(X3)
02740		JRST	SF1		;ONE FOUND
02750	SE2:	SKIPE	U1,PLLF-1(X3)
02760		JRST	SF2
02770	SE3:	SKIPE	U1,PLLB-1(X3)
02780		JRST	SF3
02790	SE4:	SKIPE	U1,PLRB-1(X3)
02800		JRST	SF4
02810		JRST	SF5		;MUST BE ONE
02820
02830	SF1:	AOS	SETC
02840		SUBI	U1,1
02850		AND	U1,PLRF-1(X3)
02860		JUMPN	U1,SET2C
02870		JRST	SE2
02880
02890	SF2:	SKIPE	SETC
02900		JRST	SET2C
02910		AOS	SETC
02920		SUBI	U1,1
02930		AND	U1,PLLF-1(X3)
02940		JUMPN	U1,SET2C
02950		JRST	SE3
02960
02970	SF3:	SKIPE	SETC
02980		JRST	SET2C
02990		AOS	SETC
03000		SUBI	U1,1
03010		AND	U1,PLLB-1(X3)
03020		JUMPN	U1,SET2C
03030		JRST	SE4
03040
03050	SF4:	SKIPE	SETC
03060		JRST	SET2C
03070		AOS	SETC
03080		SUBI	U1,1
03090		AND	U1,PLRB-1(X3)
03100		JUMPN	U1,SET2C
03110	SF5:	CAIL	X3,14		;SAFER TO SAVE ANYWAY
03120		JRST	SET2C		;YES
03130		PUSHJ	PDP,PUP		;UPDATE
03140		SOJA	X3,SET7		;MUST BE ERROR
03150		JRST	SET2		;GO AROUND AGAIN
03160
03170	SET2C:	CAIL	X4,10
03180		JRST	SET4		;MUST SAVE IN OVERFLOW
03190		MOVEM	A,MA(X1)
03200		MOVEM	P,MP(X1)
03210		MOVEM	K,MK(X1)
03220		MOVE	Z,PLRF-1(X3)	;STORE ITEMS SUBJECT TO CHANGE
03230		MOVEM	Z,MRF(X1)
03240		MOVE	Z,PLLF-1(X3)
03250		MOVEM	Z,MLF(X1)
03260		MOVE	Z,PLLB-1(X3)
03270		MOVEM	Z,MLB(X1)
03280		MOVE	Z,PLRB-1(X3)
03290		MOVEM	Z,MRB(X1)
03300	SET3:	MOVE	Z,EEB-1(X3)
03310		MOVEM	Z,ME(X1)
03320		MOVE	Z,EEB2-1(X3)
03330		MOVEM	Z,ME2(X1)
03340		MOVEM	X3,MSKIP(X1)
03350		SKIPE	TREE
03360		PUSHJ	PDP,SETT3
03370		ADDI	X1,1
03380		AOJA	X4,SET1
03390
03400	SET2B:	MOVE	Z,EEB-3(X3)
03410		MOVEM	Z,EEB-1(X3)
03420		MOVE	Z,EEB2-3(X3)
03430		MOVEM	Z,EEB2-1(X3)
03440		JRST	SET2A
03450
03460	SET4:	CAIG	X4,10
03470		MOVE	X1,TRUNK
03480		MOVEM	A,OVA(X1)
03490		MOVEM	P,OVP(X1)
03500		MOVEM	K,OVK(X1)
03510		MOVE	Z,PLRF-1(X3)	;STORE ITEMS WHICH MAY CHANGE
03520		MOVEM	Z,OVRF(X1)
03530		MOVE	Z,PLLF-1(X3)
03540		MOVEM	Z,OVLF(X1)
03550		MOVE	Z,PLLB-1(X3)
03560		MOVEM	Z,OVLB(X1)
03570		MOVE	Z,PLRB-1(X3)
03580		MOVEM	Z,OVRB(X1)
03590	SET5:	MOVE	Z,EEB-1(X3)
03600		MOVEM	Z,OVE(X1)
03610		MOVE	Z,EEB2-1(X3)
03620		MOVEM	Z,OVE2(X1)
03630		MOVEM	X3,OVSKIP(X1)
03640		SKIPE	TREE
03650		PUSHJ	PDP,SETT5
03660		SETZM	OVA+1(X1)
03670		ADDI	X1,1
03680		AOJA	X4,SET1
03690
03700	SET6:	EXCH	X1,X1SET
03710		CAIGE	X4,10
03720		SETZM	MA(X1)		;SET GUARD IN MAIN IF NEEDED
03730		JUMPLE	X4,SET8		;NO MUP CASE
03740		MOVE	U1,X2
03750		ANDI	U1,PMASK
03760		CAIL	U1,PSIZE-1	;CAN WE GO ON
03770		AOJA	X2,TIP		;NO
03780		MOVE	U3,BRUSH-1(X2)
03790		ADD	U3,X4
03800		MOVEM	U3,BRUSH(X2)
03810		CAMG	U1,WIDTH
03820		AOJA	X2,PL1		;GO ON
03830		ADD	U3,TAPER
03840		MOVEM	U3,BRUSH-1(X2)
03850		CAMLE	U3,DEPTHM
03860		AOJA	X2,TIP		;TIME TO STOP
03870		AOJA	X2,PL1		;INDEX TO PL1
03880
03890	;NO LEGAL MOVES AFTER MUP
03900	SET7:	TRNE	X3,1
03910		JRST	SET1
03920		MOVE	U1,PSKIP-1(X2)
03930		TRNE	U1,1
03940		JRST	SET8A	;ODD NO LEGAL LIKE EVEN NO MUP
03950	SET7A:	MOVE	U2,X2
03960		ANDI	U2,PMASK
03970		MOVE	Z,WIN
03980		SUB	Z,PLY(X2)
03990		SUB	Z,X3
04000		SETZ	X3,
04010		SKIPE	TREE
04020		PUSHJ	PDP,TRESS	;YES TRESS
04030		CAMG	Z,S-1(U2)
04040		MOVE	Z,S-1(U2)
04050		JRST	SET11
04060
04070	SET8:	MOVE	U1,PSKIP-1(X2)
04080		TRNE	U1,1
04090		JRST	SET7A	;ODD NO MUP LIKE EVEN NO LEGAL
04100	SET8A:	MOVE	U2,X2
04110		ANDI	U2,PMASK
04120		MOVE	Z,LOSE
04130		ADD	Z,PLY(X2)
04140		ADD	Z,X3
04150		SETZ	X3,
04160		SKIPE	TREE
04170		PUSHJ	PDP,TRESS
04180		CAMLE	Z,S-1(U2)
04190		MOVEM	Z,S-1(U2)
04200		AOJA	X2,SET		;ANOTHER AT SAME LEVEL
04210
04220	TRESP:	SETZM	X3
04230		MOVE	U1,PSKIP-1(X2)
04240		TRNN	U1,1
04250		MOVNS	Z
04260		MOVE	U2,X2
04270		ANDI	U2,PMASK
04280		SKIPN	U2
04290		ADDI	U2,PSIZE
04300	TRESS:	MOVE	U5,S-1(U2)	;PREPARE A-B SCORES
04310		MOVE	U3,X2
04320		MOVE	U1,PSKIP-2(U3)
04330		TRNN	U1,1
04340		SOJA	U3,.-2
04350		ANDI	U3,PMASK
04360		SKIPN	U3
04370		ADDI	U3,PSIZE
04380		MOVE	U3,S-2(U3)
04390		MOVE	U1,PSKIP-1(X2)
04400		TRNE	U1,1
04410		EXCH	U5,U3
04420		MOVEM	U3,ZZ-2(X3)
04430		MOVEM	U5,ZZ-1(X3)
04440		JRST	TREES
04450
04460	;NO MORE BOARDS BACK-UP
04470	SET9:	MOVEM	Z,ZS
04480		SKIPE	TREE
04490		PUSHJ	PDP,TRESP
04500		MOVE	Z,ZS
04510		MOVEM	Z,S-1(U2)
04520		JRST	SET10
04530
04540	SET9A:	SKIPE	TREE
04550		PUSHJ	PDP,TRESP
04560	SET10:	MOVE	U2,X2
04570		ANDI	U2,PMASK		;GET PLY PORTION ONLY
04580		SKIPN	U2
04590		ADDI	U2,PSIZE		;CORRECTION IF PLY OVER
04600		MOVE	Z,S-1(U2)
04610	SET11:	MOVE	U1,PSKIP-2(X2)	;BACKING UP, REMEMBER
04620		TRNN	U1,1
04630		MOVNS	Z		;WOOPS, WRONG SIGN!
04640		CAIGE	U2,2
04650		JRST	SET12		;WILL GO ON TO SET21
04660		MOVE	U3,X2
04670		SUBI	U3,1		;BACK 1
04680		MOVE	U1,PSKIP-2(U3)	;TEST EARLIER SKIP
04690		TRNN	U1,1		;IS IT ODD
04700		SOJA	U3,.-2		;ONE ALWAYS EXISTS
04710		MOVE	U1,U3
04720		ANDI	U1,PMASK
04730		MOVM	U5,Z
04740		CAILE	U5,400000	;MARGIN EXEMPTION LEVEL
04750		JRST	.+7
04760		LSH	U5,-4		;DIVIDE BY 16
04770		MOVNS	U5
04780		ADD	U5,Z
04790		CAMLE	U5,S-2(U1)
04800		JRST	SET12
04810		JRST	.+3
04820		CAMLE	Z,S-2(U1)	;CAN WE ALPHA PRUNE
04830		JRST	SET12		;NO SO BETA TEST
04840		MOVE	X2,U3		;YES
04850		SOJG	U1,SET		;DEEP ENOUGHT TO SET
04860		JRST	SET21A		;NEW TRUNK NEEDED
04870	SET12:	MOVNS	Z
04880		SOJLE	U2,SET21	;COMPARE WITH SCORE
04890		CAMLE	Z,S-1(U2)
04900		MOVEM	Z,S-1(U2)
04910		JRST	SET
04920	
04930	SET21:	TRNN	X2,PMASK
04932		SUBI	X2,1
04933		LSH	X2,-PSHIFT
04935		CAMG	Z,SCORE
04940		JRST	SET21D
04950		MOVEM	Z,SCORE
04990		MOVEM	X2,MOVX		;SAVE AS MOVE RECORD
04995		JRST	SET21D
04996	SET21A:	TRNN	X2,PMASK
04997		SUBI	X1,1
04998		LSH	X2,-PSHIFT
05000	SET21D:	MOVE	U1,COUNT
05010		AOS	U2,COUNTX
05015		MOVEM	X2,MOVXZ(U2)
05016		SETOM	MOVXZ+1(U2)
05020		MOVE	U3,DEPTHM
05030		MOVEM	U3,DEPTHZ(U2)
05040		SETZM	DEPTHZ+1(U2)
05050		MOVEM	U1,COUNTZ(U2)		;SAVE TO PRINT
05060		SETZM	COUNTZ+1(U2)		;PRINT STOP
05070		SUB	U1,COUNTZ-1(U2)		;INCREMENT COUNT
05080		MOVE	U3,COUNTM
05090		SUB	U3,U1
05100		MOVEM	U3,COUNTM
05110		MOVEI	Z,4			;CORRECTION
05120		CAMG	U1,COUNTM
05130		JRST	.+3
05140		MOVNS	Z
05150		JRST	.+4
05160		IMULI	U1,5
05170		LSH	U1,-2
05180		CAMG	U1,COUNTM
05190		ADDM	Z,DEPTHM
05200		SKIPN	U1,ORDER
05210		JRST	EXIT
05220		SETZ	X1,
05230		LSHC	X1,4
05240		MOVEM	U1,ORDER	;SAVE REST OF POINTER
05250		MOVE	Z,FLZZ-1(X1)
05260		CAMLE	Z,BAD		;IF Z < BAD THEN NO USE TO GO ON
05270		JRST	.+7
05280		SKIPN	TREE
05290		JRST	.+4
05300		PUSHJ	PDP,TERPRI
05310		MOVEI	U1,[ASCIZ /REMAINING TRUNKS TERMINATED./]
05320		PUSHJ	PDP,PRINT
05330		JRST	EXIT
05340		SKIPE	TREE
05350		PUSHJ	PDP,TRTRE
05351		MOVEI	U1,7
05352		MOVE	Z,LOSE
05353		MOVEM	Z,PRUZ(U1)
05354		MOVE	U2,PRUCT(U1)
05355		MOVEM	U2,PRUC(U1)
05356		SOJGE	U1,.-3
05360		MOVE	U1,STEMD
05370		MOVEM	U1,PLDPT
05380		SETZM	STEM
05390		MOVE	X2,FLX2-1(X1)	;GET NEW STARTING PLACE
05400		SUBI	X1,1
05401		MOVE	Z,GTCNT(X1)
05402		MOVEM	Z,GTCNT0		;CURRENT VALUE
05410		LSH	X1,3
05420		MOVEM	X1,TRUNK	;SAVE FOR OVERX USAGE
05430		MOVE	Z,SCORE		;NOW FIX SCORE
05440		MOVE	Q,LOSE
05450		MOVE	U2,X2
05460		MOVE	U3,X2
05470		ANDI	U3,PMASK
05480		SKIPN	U3
05490		ADDI	U3,PSIZE
05500		MOVE	U1,PLY-1(U2)
05510		TRNE	U1,1
05520		JRST	.+4
05530		MOVEM	Z,S-1(U3)
05540		SUBI	U2,1
05550		SOJG	U3,.-5
05560		MOVEM	Q,S-1(U3)
05570		SUBI	U2,1
05580		SOJG	U3,.-10
05590		SKIPN	U2,ORDER2
05600		JRST	SET21C
05610		SKIPN	U1,ORDER
05620		JRST	SET21B
05630		SETZ	X1,
05640		LSHC	X1,4
05650		MOVE	Z,FLZZ-1(X1)
05660		CAMG	Z,BEST2
05670		JRST	.+3
05680		MOVEM	Z,BEST
05690		JRST	SET21C
05700		EXCH	Z,BEST2
05710		MOVEM	Z,BEST
05720	SET21B:	EXCH	U2,ORDER
05730		MOVEM	U2,ORDER2
05740	SET21C:	TRNN	X2,PMASK
05750		JRST	TIP
05760		MOVE	U1,BRUSH-1(X2)
05770		CAML	U1,DEPTHM
05780		JRST	TIP
05790		JRST	PL1
05800	
05810	;   EXIT REPORTS FINAL MOVE.
05820
05830	EXIT:	SKIPN	TREE
05840		JRST	EXIT2
05850		PUSHJ	PDP,TERPRI
05860		SETO	U2,
05870		MOVE	U1,COUNTS(U2)
05880		SETZM	COUNTS(U2)
05890		JUMPE	U1,.+4
05900		SETZ	X2,
05910		MOVM	Z,U1
05920		PUSHJ	PDP,RJ4
05930		CAIGE	U2,24
05940		AOJA	U2,.-7
05950		PUSHJ	PDP,TERPRI
05960	EXIT2:	MOVE	Z,SCORE
05970		CAML	Z,GOOD
05980		JRST	WON
05990		CAMG	Z,BAD
06000		JRST	LOST
06010	EXIT1:	MOVE	X4,MOVX		;GET BEST TRUNK NUMBER
06020		MOVE	Z,MOA(X4)
06030		MOVEM	Z,OA
06040		MOVE	Z,MOP(X4)
06050		MOVEM	Z,OP
06060		MOVE	Z,MOK(X4)
06070		MOVEM	Z,OK
06080		MOVE	Z,MORF(X4)
06090		MOVEM	Z,ORF
06100		MOVE	Z,MOLF(X4)
06110		MOVEM	Z,OLF
06120		MOVE	Z,MOLB(X4)
06130		MOVEM	Z,OLB
06140		MOVE	Z,MORB(X4)
06150		MOVEM	Z,ORB
06160		MOVE	Z,MOJ(X4)
06170		MOVEM	Z,OJ
06180		SKIPE	TREE
06190		PUSHJ	PDP,TERPRI
06200		MOVE	U1,MOVES(X4)
06210		POPJ	PDP,
06220
06230	LOST:	PUSHJ	PDP,PDP16
06240		MOVEI	U1,[ASCIZ / RESIGNS./]
06250		PUSHJ	PDP,PRINT
06260		PUSHJ	PDP,TERPRI
06270		SETOM	LPFLAG		;JUST TO BE SURE
06280		RELEAS	2,		;RELEASE LPT (IT MAY HAVE BEEN INITED)
06290		JRST	BEGIN
06300	WON:	SKIPE	WONFLG#
06310		JRST	EXIT1
06320		SETOM	WONFLG
06330		PUSHJ	PDP,TERPRI
06340		PUSHJ	PDP,PDP16
06350		MOVEI	U1,[ASCIZ / EXPECTS TO WIN IN /]
06360		PUSHJ	PDP,PRINT
06370		MOVE	Z,WIN
06380		SUB	Z,SCORE
06390		ADDI	Z,1		;FIX THIS UP TO COUNT RIGHT
06400		MOVE	U1,Z
06410		PUSHJ	PDP,NUMOUT
06420		MOVEI	U1,[ASCIZ / MOVES./]
06430		PUSHJ	PDP,PRINT
06440		PUSHJ	PDP,TERPRI
06450		JRST	EXIT1
06460
06470
06480	SUBTTL	FINDM & FIND -- A. SAMUEL
06490	PAGE
06500	;************************************************************
06510	;   FINDM IS A SUBROUTINE TO SAVE A MOVE IN A FORM SUITABLE *
06520	; FOR TRANSMITTAL TO MOVOUT.                                *
06530	;************************************************************
06540
06550	FINDM:	MOVE	U5,P
06560		XOR	U5,PLA-1(X3)
06570		MOVE	Z,U5
06580		AND	Z,P
06590		XOR	U5,Z
06600		PUSHJ	PDP,FIND
06610		MOVE	U5,Z
06620		MOVE	Z,U1
06630		PUSHJ	PDP,FIND
06640		HRL	U1,Z
06650		MOVEM	U1,MOVES(X4)
06660		POPJ	PDP,
06670
06680	;****************************************************
06690	;    FIND IS A SUBROUTINE WHICH LOCATES A BIT IN    *
06700	; REGISTER U5 AND RETURNS A BINARY COUNT OF ITS     *
06710	; CHECKER POSITION IN U1. REGISTER X5 IS USED AND IS*
06720	; NOT RESET.                                        *
06730	;****************************************************
06740
06750	FIND:	SETZB	X5,U1
06760		ADDI	U1,1
06770		LSHC	X5,22
06780		JUMPN	X5,FIND6
06790		ADDI	U1,20
06800		LSHC	X5,11
06810		JUMPN	X5,FIND7
06820	FIND1:	ADDI	U1,10
06830		LSHC	X5,5
06840		JUMPN	X5,FIND8
06850	FIND2:	ADDI	U1,4
06860		LSHC	X5,2
06870		JUMPN	X5,FIND9
06880	FIND3:	ADDI	U1,2
06890		LSHC	X5,1
06900		SKIPN	X5
06910	FIND4:	ADDI	U1,1
06920		POPJ	PDP,
06930	FIND6:	LSHC	X5,-11
06940		JUMPE	X5,FIND1
06950	FIND7:	LSHC	X5,-4
06960		JUMPE	X5,FIND2
06970	FIND8:	LSHC	X5,-2
06980		JUMPE	X5,FIND3
06990	FIND9:	LSHC	X5,-1
07000		JUMPE	X5,FIND4
07010		POPJ	PDP,
07020
     

00010	SUBTTL	PROGRAM STORAGE SPACE
00020	PAGE
00030
00040	;***********************************************************
00050	;MAIN IS INDEXED BY TRUNK PLY AND BRANCH
00060	MA:	BLOCK	PSIZE*140		;ACTIVE PIECES
00070	MP:	BLOCK	PSIZE*140		;PASSIVE PIECES
00080	MK:	BLOCK	PSIZE*140		;ALL KINGS
00090	MRF:	BLOCK	PSIZE*140		;RIGHT FOREWARD MOVES
00100	MLF:	BLOCK	PSIZE*140		;LEFT FOREWARD MOVES
00110	MLB:	BLOCK	PSIZE*140		;LEFT BACKWARD MOVES
00120	MRB:	BLOCK	PSIZE*140		;RIGHT BACKWARD MOVES
00130	MSKIP:	BLOCK	PSIZE*140		;SKIPPED MOVES
00140	ME:	BLOCK	PSIZE*140		;HALF EVALUATION
00150	ME2:	BLOCK	PSIZE*140
00160	MMOVA:	BLOCK	PSIZE*140
00170	MMOVP:	BLOCK	PSIZE*140
00180
00190	MOVA:	BLOCK	400
00200	MOVP:	BLOCK	400
00210	MVAA:	BLOCK	20
00220	MVPP:	BLOCK	20
00230	MOVAA:	Z
00240	MOVPP:	Z
00250	MMSKIP:	BLOCK	20
00260
00261	GTCNT0:	Z			;CURRENT REPLY COUNT (FROM 0)
00262	GTCNT:	BLOCK	20		;REPLY COUNTS
00263	
00270		Z
00280	PRUC:	BLOCK	20		;PRUNE COUNT
00290		0		;GUARD
00300	COUNTZ:	BLOCK	21		;COUNTS FOR EACH TRUNK
00310	DEPTHZ:	BLOCK	20		;DEPTHS FOR EACH TRUNK
00315	MOVXZ:	BLOCK	20		;TRUNK ORDER AS USED
00320	COUNTX:	0			;INDEX TRUNKS FOR COUNTZ
00330	;PATH IS INDEXED BY TRUNK AND PLY IN X2
00340		Z			;TO ALLOW RAP AROUND
00350	BPTR:	BLOCK	PSIZE*14		;POINTER WITH 8 4-BIT FIELDS
00360	BPTRO:	Z
00370		Z
00380	PSKIP:	BLOCK	PSIZE*14
00390		0		;GUARD
00400	BRUSH:	BLOCK	PSIZE*14
00410	MOVX:	Z
00420
00430
00440	;TWIG SPACE IS INDEXED BY BRANCH AND TWIG
00450	TRF:	BLOCK	400
00460	TLF:	BLOCK	400
00470	TLB:	BLOCK	400
00480	TRB:	BLOCK	400
00490	TSKIP:	BLOCK	400
00500	TE:	BLOCK	400
00510	TE2:	BLOCK	400
00520
00530	;OV SPACE IS INDEXED BY TRUNK AND NUMBER IN X4
00540	OVA:	BLOCK	140
00550	OVP:	BLOCK	140
00560	OVK:	BLOCK	140
00570	OVRF:	BLOCK	140
00580	OVLF:	BLOCK	140
00590	OVLB:	BLOCK	140
00600	OVRB:	BLOCK	140
00610	OVSKIP:	BLOCK	140
00620	OVE:	BLOCK	140
00630	OVE2:	BLOCK	140
00640	OVMOVA:	BLOCK 	140
00650	OVMOVP:	BLOCK	140
00660
00670
00680	;FLIT SPACE IS INDEXED BY TRUNK IN X1
00690	FLZZ:	BLOCK	20		;BEST ZZ FOR TRUNK AT FLIT TIME
00700	FLX2:	BLOCK	20		;X1 VALUES AT FLIT TIME
00710
00720	;INITIAL BOARD AT START OF TREE SEARCH
00730	IA:	Z
00740	IP:	Z
00750	IK:	Z
00760
00770	;MOVE SPACE FOR ALL INITIAL MOVES
00780	MOA:	BLOCK	20
00790	MOP:	BLOCK	20
00800	MOK:	BLOCK	20
00810	MORF:	BLOCK	20
00820	MOLF:	BLOCK	20
00830	MOLB:	BLOCK	20
00840	MORB:	BLOCK	20
00850	MOVES:	BLOCK	20
00860	MOJ:	BLOCK	20
00870
00880	;BRANCH SPACE INDEXED BY BRANCH IN X4
00890	BPLY:	BLOCK	20
00900	BSKIP:	BLOCK	20
00910	BZ:	BLOCK	20		;INDICATED BRANCH SCORE
00920
00930	DEPTHM:	60
00940	TIMEX:	170		;STANDARD TIME
00950	DEPTH:	3		;STANDARD DEPTH OF 3
00960	U2MAX:	0		;MAX MAIN DEPTH
00970	COUNTM:	0		;REMAINING COUNT
00980	PRUZ:	BLOCK	PSIZE	;PRUNE COMPARE SCORE
00990	
01000		0		;EXTRA GUARD FOR TEMP PURPOSES
01010	SA:	BLOCK	100	;TO SAVE GAME RECORD
01020	SP:	BLOCK	100
01030	SK:	BLOCK	100
01040		0
01050
01060	STEM:	Z		;TRUNK STEM FLAG
01070	FLIT:	Z		;FLIT FLAG
01080	EEBFLF:	Z		;USED IN TIP
01090	
01100	INTERN	LOADTA,DFILL,RFILL,DSAVE,LC
01110	LOADTA:
01120	LC:
01130	RFILL:
01140	DFILL:
01150	DSAVE:	JRST	NOTICE
     

00010
00020
00030
00040
00050	SUBTTL	PLAUSABILITY ANALYSIS -- A. SAMUEL
00060	PAGE
00070
00080	;**********************************************************
00090	;    PLAUS READS DATA FROM MAIN STORAGE AT MA-10(X1) AND  *
00100	; STARTS WITH X3 AS INDEX SET TO 0,LOOKS AHEAD A VARIBLE  *
00110	; AMOUNT DEPENDING UPON THE NUMBER OF JUMPS ENCOUNTERED,  *
00120	; STORING DATA IN A SPACE DESIGNATED BY A PREFIX PL IN    *
00130	; PLACE OF THE PREFIX M USED FOR MAIN SPACE.              *
00140	; INDEX (X1) CONTAINS TRUNK(3), PLY(4), AND BRANCH(3) IN  *
00150	; THAT ORDER WHILE (X3) CONTAINS PLY(4) ONLY.             *
00160	; ANOTHER INDEX (X2) CONTAINS THE SAME VALUES AS (X1) BUT *
00170	; WITHOUT BRANCH. BOARDS FOUND IN PLAUS WHICH MAY HAVE    *
00180	; TO BE SAVED ARE STORED IN TWIG SPACE AND INDEXED BY (X4)*
00190	;  X4 CONTAINS BRANCH(4) AND TWIG(4)                      *
00200	;    WE ENTER PLAUS INDEXED ONE LEVEL IN PLY BEYOND THE   *
00210	; LEVEL WHERE THE LAST BOARDS HAVE BEEN STORED (-10 SINCE *
00220	; PLY IS MOVED OVER).  X3 IS SET TO ZERO AT THIS LEVEL.   *
00230	;**********************************************************
00240
00250	PL1:	SETZM	PLFLG
00260		MOVE	U2,X2
00270		ANDI	U2,PMASK
00280		MOVE	Z,LOSE
00290		MOVEM	Z,PRUZ-1(U2)
00292		MOVE	Z,PRUCT-1(U2)
00293		MOVEM	Z,PRUC-1(U2)
00294		MOVE	U1,PLDPT
00298		CAILE	U2,2
00299		JRST	.+4
00300		SKIPE	GTCNT0
00302		CAIG	U2,1
00303		MOVE	U1,REPLYD
00304		HLRZ	Z,PL1TAB(U1)
00305		MOVEM	Z,TWIGD#
00306		HRRZ	Z,PL1TAB(U1)
00307		MOVEM	Z,AFTERD#
00310		SETZB	X3,X4		;USED FOR PLY AND TWIG IN PLAUS
00320		MOVE	X1,X2		;RESET X1 FROM X2
00330		LSH	X1,3		;MAKE SPACE FOR BRANCH NUMBER
00340	PL2:	MOVE	U2,X4
00350		LSH	U2,-4
00360		SETZM	MJW-1
00370		MOVE	A,MA-10(X1)
00380		MOVEM	A,PLA-1
00390		MOVE	P,MP-10(X1)
00400		MOVEM	P,PLP-1
00410		MOVE	K,MK-10(X1)
00420		MOVEM	K,PLK-1
00430		MOVE	Z,MRF-10(X1)
00440		MOVEM	Z,PLRF-1
00450		MOVE	Z,MLF-10(X1)
00460		MOVEM	Z,PLLF-1
00470		MOVE	Z,MLB-10(X1)
00480		MOVEM	Z,PLLB-1
00490		MOVE	Z,MRB-10(X1)
00500		MOVEM	Z,PLRB-1
00510		MOVEM	A,MOVAA
00520		MOVE	U1,MSKIP-10(X1)
00530		MOVEM	U1,BSKIP(U2)
00540		ADD	U1,PLY-1(X2)
00550		MOVEM	U1,PLY(X2)
00560		MOVEM	U1,BPLY(U2)	;NEWEST BASE PLY
00570		MOVE	Z,WIN
00580		SUB	Z,PLY-1(X2)
00590
00600		MOVEM	Z,BZ(U2)
00610		XOR	U1,SIDE
00620		ANDI	U1,1
00630		SKIPE	TREE
00640		PUSHJ	PDP,TREM	;GET DATA FROM MAIN
00660		MOVE	Z,ME-10(X1)
00670		MOVEM	Z,EEB-1
00680		MOVE	Z,ME2-10(X1)
00690		MOVEM	Z,EEB2-1
00700	PL2B:	TRC	U1,1
00710		MOVEM	U1,COLOR
00720		MOVE	Z,LOSE
00730		ADD	Z,PLY(X2)
00740		MOVEM	Z,ZZ-2
00750		ADDI	Z,1
00760		MOVEM	Z,ZZ-1	;START WITH LOSING SCORE IN ZZ
00770	PL3:	PUSHJ	PDP,PUP		;UPDATE USING DATA FROM MAIN
00780		JRST	PL11		;NO MORE MOVES RETURN
00790		SKIPE	TREE
00800		PUSHJ	PDP,TWIGT
00810	PL4C:	MOVEM	A,PLA(X3)
00820		MOVEM	P,PLP(X3)
00830		MOVEM	K,PLK(X3)
00840		MOVEM	A,TA(X4)
00850		MOVEM	P,TP(X4)
00860		MOVEM	K,TK(X4)
00870		PUSHJ	PDP,LEGAL	;NORMAL MOVE RETURN, DEFINES TWIG
00880		JRST	PL13		;NO MOVE RETURN FROM LEGAL
00890		AOJA	X3,PL4E		;JUMP RETURN
00920		ADDI	X3,1  		;NORMAL INDEX OF PLY IN PLAUS
00930	PL4D:	MOVE	Z,PLRF-1(X3)
00940		MOVEM	Z,TRF(X4)
00950		MOVE	Z,PLLF-1(X3)
00960		MOVEM	Z,TLF(X4)
00970		MOVE	Z,PLLB-1(X3)
00980		MOVEM	Z,TLB(X4)
00990		MOVE	Z,PLRB-1(X3)
01000		MOVEM	Z,TRB(X4)
01010		MOVE	Z,ZZ-3(X3)
01020		MOVEM	Z,ZZ-1(X3)
01030		PUSHJ	PDP,PUP		;UPDATE AGAIN TO SEE IF CORRECT PLACE
01040		JRST	PL4ERR		;TROUBLE,TREAT AS NO MOVE FROM LEGAL
01050		CAIL	X3,16
01060		JRST	PL4A		;OUT OF SPACE
01070		SKIPE	PLRF-1(X3)	;ARE THERE ANY MOVES LEFT?
01080		JRST	PL4A		;YES SO COMPLETE TWIG SAVE
01090		SKIPE	PLLF-1(X3)
01100		JRST	PL4A
01110		SKIPE	PLLB-1(X3)
01120		JRST	PL4A
01130		SKIPN	PLRB-1(X3)	;STILL NOT READY FOR TWIG SAVE
01140		JRST	PL4C
01150	PL4A:	MOVEM	X3,XTWIG	;COMPLETE TWIG SAVE
01160		MOVEM	X3,TSKIP(X4)	;SAVE AS SKIP VALUE
01170		MOVE	Z,EEB-1(X3)
01180		MOVEM	Z,TE(X4)
01190		MOVE	Z,EEB2-1(X3)
01200		MOVEM	Z,TE2(X4)
01210		TRNN	X3,1
01220		CAIL	X3,12		;STOP AT TWIG IF X3=10
01230		CAMGE	X3,TWIGD	;STOP AT TWIG IF G
01240		JRST	PL5A		;GO ON
01250		SOJA	X3,PL10Z	;BACK TO EVA
01280
01290	PL4E:	MOVE	Z,EEB-3(X3)
01300		MOVEM	Z,EEB-1(X3)
01310		MOVE	Z,EEB2-3(X3)
01320		MOVEM	Z,EEB2-1(X3)
01325		CAIGE	X3,17
01330		JRST	PL4D
01335	SOJA	X3,PL10Z		;THE BEST THAT CAN BE DONE
01340
01350	PL4B:	CAIL	X3,10
01360		SOJA	X3,PL5E
01370	 	MOVE	Z,ZZ-3(X3)
01380		MOVEM	Z,ZZ-1(X3)
01390	PL5:	PUSHJ	PDP,PUP		;UPDATE AFTER TWIG SAVE
01400		JRST	PL8		;NO MOVE RETURN FROM PUP
01410	PL5A:	MOVEM	A,PLA(X3)
01420		MOVEM	P,PLP(X3)
01430		MOVEM	K,PLK(X3)
01440		PUSHJ	PDP,LEGAL	;FIND LEGAL MOVES
01450		JRST	PL14		;NO MOVES? FIND OUT MEANING
01460		AOJA	X3,PL5C		;JUMPS SO GO DEEPER
01464		TRNN	X3,1
01468		JRST	.+3
01560		CAMGE	X3,AFTERD	;CAN WE STOP
01570		AOJA	X3,PL4B		;NO
01580	PL5E:	PUSHJ	PDP,EVA
01590		CAMG	X3,XTWIG	;IS IT SAFE TO ALPHA PRUNE
01600		JRST	PL5B
01610		CAMG	Z,ZZ-2(X3)	;SCORE LEFT IN Z SO ALPHA TEST
01620		SOJA	X3,PL5		;ALPHA SAYS "PRUNE IT!"
01630	PL5B:	MOVNS	Z		;CHANGE SIGN FOR BETA TEST
01640		CAMG	Z,ZZ-1(X3)	;NOW TEST
01645		JRST	PL5
01650		MOVEM	Z,ZZ-1(X3)	;REPLACE WITH LARGER VALUE
01655		MOVN	U1,U2SAV
01657		MOVEM	U1,ZZZ-1(X3)
01660		JRST	PL5		;TEST NEXT MOVE FROM SAME TWIG
01661	
01662	PL1TAB:	1000003
01663		1000005
01664		1000007
01665		3000003
01666		3000005
01667		3000007
01668	
01675	
01676	;X3 AT EVA VS REPLY,Y FLIT, STEM AND PLAY SETTINGS
01677	;  X3 AT
01678	;SETTINGS	0	1	2	3	4	5
01679	;ODD TWIG	1	1	1	3	3	3
01680	;EVEN TWIG	10	10	10	10	10	10
01681	;EVEN AFTER	2	2	2	2	2	2
01682	;ODD AFTER	3	5	7	3	5	7
01683	
01690	PL5C:	CAIL	X3,16		;CHANGED 11-20-70
01700		SOJA	X3,PL5E
01710		MOVE	Z,EEB-3(X3)
01720		MOVEM	Z,EEB-1(X3)
01730		MOVE	Z,EEB2-3(X3)
01740		MOVEM	Z,EEB2-1(X3)
01750		JRST	PL4B
01760
01770	PL8:	MOVN	Z,ZZ-1(X3)
01775		MOVN	U1,ZZZ-1(X3)
01780		CAMG	X3,XTWIG	;EXHAUSTION BACK-UP BUT WHERE
01790		JRST	PL10		;MUST BE JUST AT TWIG-SAVE
01800		CAMG	Z,ZZ-2(X3)	;HOW ABOUT BETA
01805		SOJA	X3,PL5
01810		MOVEM	Z,ZZ-2(X3)	;SAVE AS THE LARGER
01815		MOVEM	U1,ZZZ-2(X3)
01820		SOJA	X3,PL5		;BACK UP BY ONE IN PLY
01830
01840	PL4ERR:	MOVEI	U1,[ASCIZ /INDEXING ERROR: PL4C./]
01850		PUSHJ	PDP,PRINT
01860		JRST	PL13
01870
01880	PL14:	CAMLE	X3,XTWIG	;SAFE TO BACK UP?
01890		SOJA	X3,PL5		;YES
01900	PL13:	TRNN	X3,1
01910		JRST	PL13A
01920		MOVE	Z,LOSE
01930		ADD	Z,PLY(X2)
01940		ADD	Z,X3
01950		JRST	PL10A
01960	PL13A:	MOVE	Z,WIN
01970		SUB	Z,PLY(X2)
01980		SUB	Z,X3
01990		MOVEM	Z,ZZ-1
02000		SETZM	X3
02010		JRST	PL11
02020
02030	PL10Z:	PUSHJ	PDP,EVA
02040		MOVNS	Z
02045		MOVN	U1,U2SAV
02050	;NOW THE NORMAL EXHAUSTION CASE
02060	PL10:	TRNN	X3,1
02070		MOVNS	Z
02080		ADDI	X4,1
02090		TRNN	X4,17
02100		SUBI	X4,1		;NO MORE ROOM
02110	PL10A:	CAMG	Z,ZZ-1		;ZZ-1 NOT INDEXED SINCE X3 ALWAYS = 0 HERE
02115		JRST	.+3
02120		MOVEM	Z,ZZ-1
02125		MOVEM	U1,ZZZ-1
02130		SETZB	X3,TA(X4)
02140		JRST	PL3		;GO TO NEXT TWIG
02150
02160	;TO GET BOARDS FROM OVERFLOW
02170	PL16:	CAIGE	X4,220
02180		MOVE	X1,TRUNK
02190		SKIPG	OVA(X1)		;ARE THERE ANY MORE BOARDS
02200		JRST	PL17		;NO, SO IT IS TIME TO SORT SCORES
02210		MOVE	U2,X4
02220		LSH	U2,-4
02230		MOVE	A,OVA(X1)
02240		MOVEM	A,PLA-1
02250		MOVE	P,OVP(X1)
02260		MOVEM	P,PLP-1
02270		MOVE	K,OVK(X1)
02280		MOVEM	K,PLK-1
02290		MOVE	Z,OVRF(X1)
02300		MOVEM	Z,PLRF-1
02310		MOVE	Z,OVLF(X1)
02320		MOVEM	Z,PLLF-1
02330		MOVE	Z,OVLB(X1)
02340		MOVEM	Z,PLLB-1
02350		MOVE	Z,OVRB(X1)
02360		MOVEM	Z,PLRB-1
02370		MOVEM	A,MOVAA
02380		MOVE	Z,WIN
02390		SUB	Z,PLY-1(X2)
02400		MOVEM	Z,BZ(U2)
02410		MOVE	U1,OVSKIP(X1)
02420		MOVEM	U1,BSKIP(U2)
02430		ADD	U1,PLY-1(X2)
02440		MOVEM	U1,PLY(X2)
02450		MOVEM	U1,BPLY(U2)
02460		XOR	U1,SIDE
02470		ANDI	U1,1
02480		SKIPE	TREE
02490		PUSHJ	PDP,TREOVM	;GET DATA FROM OVERFLOW
02500		MOVE	Z,OVE(X1)
02510		MOVEM	Z,EEB-1(X3)
02520		MOVE	Z,OVE2(X1)
02530		MOVEM	Z,EEB2-1(X3)
02540		JRST	PL2B
02550
02560	PL11:	LSH	X4,-4
02570		MOVE	Z,ZZ-1
02575		MOVE	U1,ZZZ-1
02580		MOVE	U2,BSKIP(X4)
02590		MOVEM	U2,PSKIP-1(X2)
02600		TRNE	U2,1
02605		JRST	.+3
02610		MOVNS	Z
02615		MOVNS	U1
02620		MOVEM	Z,BZ(X4)
02625		MOVEM	U1,BZZ(X4)
02650		ADDI	X4,1
02660		MOVE	Z,WIN
02670		SUB	Z,PLY(X2)
02680		MOVEM	Z,BZ(X4)
02690		LSH	X4,4
02700		SETZB	X3,TA(X4)	; RESET X3 AND STORE STOP
02710		CAIL	X4,200		;DOES THIS PUT US IN OVERFLOW?
02720		AOJA	X1,PL16		;YES, SO GET NEXT BOARD THERE
02730		SKIPE	MA-7(X1)	;IS THERE ANOTHER BRANCH
02740		AOJA	X1,PL2
02750
02760
02770	PL17:	LSH	X4,-4		;DISCARD TWIG PORTION
02780		MOVE	U3,BRUSH-1(X2)
02790		ADD	U3,X4
02800		MOVEM	U3,BRUSH(X2)
02810		CAIG	X4,1
02820		JRST	PL17A		;ONLY ONE MOVE
02830		CAILE	X4,10		;IS THERE OVERFLOW?
02840		JRST	PL19		;MERGING NEEDED
02850		SETZM	BPTRO		;SET AS FLAG
02860		PUSHJ	PDP,SORT
02870	PL18:	MOVE	X4,BESTM	;NOW MOVE TWIGS
02880		SUBI	X4,1
02890		MOVE	U3,X2
02900		MOVE	U1,PSKIP-2(U3)
02910		TRNN	U1,1
02920		SOJA	U3,.-2
02930		ANDI	U3,PMASK
02940		MOVE	Z,S-2(U3)
02950		MOVNM	Z,ZS
02960		MOVE	U2,X2
02970		ANDI	U2,PMASK
02980		CAMLE	U2,U2MAX
02990		MOVEM	U2,U2MAX
03000		MOVE	U1,BPLY(X4)
03010		MOVEM	U1,PLY(X2)
03020		MOVE	U1,BSKIP(X4)
03030		MOVEM	U1,PSKIP-1(X2)
03040		TRNN	U1,1
03050		MOVE	Z,S-1(U2)
03060		MOVEM	Z,S(U2)
03070		SKIPE	TREE
03080		PUSHJ	PDP,MTRE	;PRINT SELECTED MOVE
03090		MOVN	Z,BZ(X4)
03100		CAMGE	Z,GOOD
03103		CAMG	Z,BAD		;STOP IF GOOD OR BAD
03106		JRST	PL17C
03120		MOVE	U2,X2
03130		ANDI	U2,PMASK
03140		CAMLE	U2,WIDTH
03150		SKIPN	FLIT
03160		JRST	PL18D
03170		SKIPN	STEM
03180		JRST	PL18D
03190		MOVE	U1,BSKIP(X4)
03200		CAIL	U1,2
03210		JRST	PL18D
03220		MOVE	U3,BRUSH(X2)
03230		LSH	U3,1
03240		CAMGE	U3,DEPTHM
03250		JRST	PL18D
03260		CAMG	Z,S-1(U2)
03270		JRST	SET9A
03280		CAML	Z,ZS
03290		JRST	SET9
03300	PL18D:	LSH	X4,4		;ALLOW FOR TWIGS (4 BITS)
03310		MOVE	X1,X2
03320		LSH	X1,3		;MAKE SPACE HERE ALSO
03330		MOVEI	U1,10		;COUNT BRANCHES STORED IN MAIN
03340	SORT13:	MOVE	U2,TA(X4)
03350		MOVEM	U2,MA(X1)	;THIS IS THE CORRECT LEVEL
03360		JUMPE	U2,SORT16	;LAST TWIG HAS BEEN STORED
03370		MOVE	U2,TK(X4)
03380		MOVEM	U2,MK(X1)
03390		MOVE	U2,TP(X4)
03400		MOVEM	U2,MP(X1)
03410		MOVE	U2,TRF(X4)
03420		MOVEM	U2,MRF(X1)
03430		MOVE	U2,TLF(X4)
03440		MOVEM	U2,MLF(X1)
03450		MOVE	U2,TLB(X4)
03460		MOVEM	U2,MLB(X1)
03470		MOVE	U2,TRB(X4)
03480		MOVEM	U2,MRB(X1)
03490		MOVE	U2,TSKIP(X4)
03500		MOVEM	U2,MSKIP(X1)
03510		MOVE	U2,TE(X4)
03520		MOVEM	U2,ME(X1)
03530		MOVE	U2,TE2(X4)
03540		MOVEM	U2,ME2(X1)
03550		SKIPE	TREE
03560		PUSHJ	PDP,TRETM	;FROM TWIG TO MAIN
03570		ADDI	X4,1
03580		SOJLE	U1,SORT14	;STOP IF MAIN IS FILLED
03590		AOJA	X1,SORT13	;GET NEXT TWIG
03600
03610	TRETM:	MOVE	U2,MOVA(X4)
03620		MOVEM	U2,MMOVA(X1)
03630		MOVE	U2,MOVP(X4)
03640		MOVEM	U2,MMOVP(X1)
03650		POPJ	PDP,
03660
03670	PL17A:	JUMPE	X4,PL17C	;NONE ACCEPTABLE
03680		MOVEM	X4,BESTM
03690		SETZM	BPTR-1(X2)
03700		JRST	PL18
03710
03860	PL17C:	MOVE	U2,X2
03870		ANDI	U2,PMASK
03880		MOVN	Z,BZ(X4)
03890		CAMLE	Z,S-1(U2)
03900		JRST	SET9
03910		JRST	SET9A
03920
03930
03940	TREM:	MOVE	U2,X4
03950		LSH	U2,-4
03960		MOVE	Z,MMOVA-10(X1)
03970		MOVEM	Z,MVAA(U2)
03980		MOVE	Z,MMOVP-10(X1)
03990		MOVEM	Z,MVPP(U2)
04000		MOVE	Z,MSKIP-10(X1)
04010		MOVEM	Z,MMSKIP(U2)
04020		POPJ	PDP,
04030
04040	TREOVM:	MOVE	U2,X4
04050		LSH	U2,-4
04060		MOVE	Z,OVMOVA(X1)
04070		MOVEM	Z,MVAA(U2)
04080		MOVE	Z,OVMOVP(X1)
04090		MOVEM	Z,MVPP(U2)
04100		MOVE	Z,OVSKIP(X1)
04110		MOVEM	Z,MMSKIP(U2)
04120		POPJ	PDP,
04130
04140	;WE MUST PUT THE REST IN THE OVERFLOW REGION
04150	SORT14:	MOVE	U1,TRUNK
04160		MOVEI	U3,10
04170	SORT15:	MOVE	U2,TA(X4)
04180		MOVEM	U2,OVA(U1)
04190		JUMPE	U2,SORT16	;LAST TWIG
04200		MOVE	U2,TP(X4)
04210		MOVEM	U2,OVP(U1)
04220		MOVE	U2,TK(X4)
04230		MOVEM	U2,OVK(U1)
04240		MOVE	U2,TRF(X4)
04250		MOVEM	U2,OVRF(U1)
04260		MOVE	U2,TLF(X4)
04270		MOVEM	U2,OVLF(U1)
04280		MOVE	U2,TLB(X4)
04290		MOVEM	U2,OVLB(U1)
04300		MOVE	U2,TRB(X4)
04310		MOVEM	U2,OVRB(U1)
04320		MOVE	U2,TSKIP(X4)
04330		MOVEM	U2,OVSKIP(U1)
04340		MOVE	U2,TE(X4)
04350		MOVEM	U2,OVE(U1)
04360		MOVE	U2,TE2(X4)
04370		MOVEM	U2,OVE2(U1)
04380		SKIPE	TREE
04390		PUSHJ	PDP,TREOV	;FROM TWIG TO OVERFLOW
04400		ADDI	X4,1
04410		SOJLE	U3,SORT16
04420		AOJA	U1,SORT15	;GET NEXT ONE
04430
04440	TREOV:	MOVE	U2,MOVA(X4)
04450		MOVEM	U2,OVMOVA(U1)
04460		MOVE	U2,MOVP(X4)
04470		MOVEM	U2,OVMOVP(U1)
04480		POPJ	PDP,
04490
04500	;ALL TWIGS HAVE BEEN SAVED 
04510
04520	SORT16:	ADDI	X2,1		;INDEX TO NEXT LEVEL
04525		SKIPE	FLIT
04530		JRST	SRT16E
04535		MOVE	U1,PLY-1(X2)
04550		SETZM	GETF3
04555		MOVE	X4,BESTM
04560		MOVN	Z,BZ-1(X4)
04561		MOVN	U3,BZZ-1(X4)
04562		MOVE	U1,BSKIP-1(X4)
04563		TRNE	U1,1		;EVEN SKIP
04564		JRST	.+3
04565		MOVNS	Z		;YES
04566		MOVNS	U3
04570		MOVE	U1,PLY-1(X2)
04572		TRNE	U1,1
04574		JRST	.+3
04576		MOVNS	Z
04578		MOVNS	U3
04612		MOVEM	Z,FLITZ#
04613		CAML	Z,[-2000000]
04614		JRST	SRT16Z
04615	SRT16Y:	SKIPN	TREE
04616		JRST	.+5
04617		MOVEI	U1,[ASCIZ /  BAD TRUNK /]
04618		PUSHJ	PDP,PRINT
04619		MOVEI	U1,2
04620		ADDM	U1,TREEX
04621		SKIPN	U5,ORDER
04622		JRST	EXIT
04623		SETZ	X5,
04624		LSHC	X5,4
04625		JRST	SORT2A
04626	SRT16Z:	MOVE	U2,X2
04630		LSH	U2,-PSHIFT
04640		ADDI	U2,1
04650		MOVEM	X2,FLX2-1(U2)
04660		MOVEM	Z,FLZZ-1(U2)
04662		ADD	U3,[103103103103]	;4 TERMS OF 9 BITS EACH
04665		MOVSM	U3,FLZZZ-1(U2)
04670		EXCH	Z,BEST
04680		CAMN	Z,WIN
04690		JRST	SRT16D		;MUST TRY ALL TRUNKS
04700		SKIPE	GETF1
04710		JRST	SRT16C		;WOOPS STILL MORE TRUNKS
04720		SKIPE	COUNTZ
04730		JRST	SRT16X
04740		MOVE	U1,COUNT
04750		MOVEM	U1,COUNTZ
04762		MOVE	U5,COUNTM
04764		SUB	U5,COUNT
04766		MOVEM	U5,COUNTM
04768		MOVE	U1,DEPTHM
04776		MOVEM	U1,DEPTHZ
04784		MOVEI	U3,4
04786		CAML	U5,COUNT
04788		JRST	.+5
04790		IMULI	U5,5
04792		LSH	U5,-2
04793		MOVNS	U3
04794		CAMG	U5,COUNT
04795		ADD	U1,U3
04799		MOVEM	U1,DEPTHM
04800		SETZM	DEPTHZ+1
04810		SETZM	COUNTZ+1
04820	SRT16X:	SETZM	COUNTX
04830		MOVE	U1,STEMD
04840		MOVEM	U1,PLDPT
04850		CAMLE	Z,BEST		;STILL EXCHANGED, REMEMBER?
04860		JRST	SRT16D		;SHOULD STILL SWAP
04870		EXCH	Z,BEST		;RESTORE BEST
04880	SRT16E:	MOVE	Z,EEB-1
04890		MOVEM	Z,EEB-2		;BACKUP PREPARE
04900		MOVE	Z,EEB2-1
04910		MOVEM	Z,EEB2-2
04920	SRT16F:	MOVE	U2,X2
04930		ANDI	U2,PMASK
04940		JUMPE	U2,TIP		;OUT OF SPACE
04945		MOVE	Z,BEST
04946		CAMN	Z,WIN
04947		JRST	PL1		;KEEP GOING IN THIS CASE
04950		CAMG	U2,WIDTH
04960		JRST	PL1
04970		MOVE	U1,PLY-1(X2)
04980		CAIL	U1,20
04990		JRST	TIP
05000		MOVE	U1,BRUSH-1(X2)
05010		CAML	U1,DEPTHM
05020		JRST	TIP
05030		JRST	PL1
05040
05050	SRT16C:	SETOM	GETF3
05060	SRT16D:	EXCH	Z,BEST		;RESTORE Z
05070		MOVE	U3,ORDER	;FIRST, MERGE ORDER
05080		SETZB	X3,U5
05090	SORT17:	LSHC	X3,4
05100		JUMPE	X3,SORT18
05110		CAMLE	Z,FLZZ-1(X3)
05120		JRST	SORT18
05130		LSH	U5,4
05140		IOR	U5,X3
05150		SETZM	X3
05160		JRST	SORT17
05170	SORT18:	LSH	U5,4
05180		IOR	U5,U2
05190	SORT19:	JUMPE	X3,SORT20
05200		LSH	U5,4
05210		IOR	U5,X3
05220		SETZM	X3
05230		LSHC	X3,4
05240		JRST	SORT19
05250	SORT20:	SKIPN	GETF3		;ARE THERE OVERFLOW TRUNKS?
05260		JRST	SORT21		;NO, SO GO AHEAD ANYWAY
05270		MOVE	X4,U5		;REPLACE POOREST TRUNK
05280		ANDI	X4,17		;SAVE POOREST POINTER
05290		XOR	U5,X4		;DELETE FROM ORDER
05300		MOVEM	X4,X4S		;SAVE
05310		SETZM	X5
05320		LSHC	X5,4
05330		JUMPE	X5,.-1		;LEFT JUSTIFY
05340		MOVE	Z,FLX2-1(X5)
05350		MOVEM	Z,BEST		;RESET BEST AFTER MERGE
05360		LSHC	X5,-4
05370		MOVEM	U5,ORDER
05380		SKIPE	TREE
05390		PUSHJ	PDP,RETREE
05400		MOVEI	X3,1
05410		MOVE	U1,SIDE
05420		MOVEM	U1,COLOR
05430		MOVE	A,PLAS		;FIX UP TO GET NEXT TRUNK
05440		MOVEM	A,PLA-1(X3)
05450		MOVE	P,PLPS
05460		MOVEM	P,PLP-1(X3)
05470		MOVE	K,PLKS
05480		MOVEM	K,PLK-1(X3)
05490		MOVE	PLSKS
05500		MOVEM	PLSKIP-1(X3)
05510		MOVE	Z,PLRFS
05520		MOVEM	Z,PLRF-1(X3)
05530		MOVE	Z,PLLFS
05540		MOVEM	Z,PLLF-1(X3)
05550		MOVE	Z,PLLBS
05560		MOVEM	Z,PLLB-1(X3)
05570		MOVE	Z,PLRBS
05580		MOVEM	Z,PLRB-1(X3)
05590		MOVE	Z,PLMJS
05600		MOVEM	Z,MJW-1(X3)
05610		SETOM	GETF2
05620		SUBI	X4,1
05630		PUSHJ	PDP,GET		;GET NEW TRUNK
05640		SKIPE	TREE
05650		PUSHJ	PDP,TERPRI
05660		SUBI	X4,1
05670		JRST	PLAY2
05680
05690	SORT21:	SETZ	X5,
05700		LSHC	X5,4
05710		JUMPE	X5,.-1		;LEFT JUSTIFY AND STRIP OFF BEST
05720	SORT2A:	MOVEM	U5,ORDER
05730		MOVE	X2,FLX2-1(X5)
05740		MOVE	X4,X2
05750		TRNN	X4,PMASK
05760		SUBI	X4,PSIZE
05770		LSH	X4,3-PSHIFT
05780		TRZ	X4,7
05790		MOVEM	X4,TRUNK	;NEW VALUE
05800		SKIPE	TREE
05810		PUSHJ	PDP,FLTREE
05820		SETZ	X5,
05830		LSHC	X5,4
05840		MOVE	Z,FLZZ-1(X5)
05850		MOVEM	Z,BEST
05860		SKIPN	U5,ORDER2
05870		JRST	SORT22
05880		CAML	Z,BEST2
05890		JRST	SORT22
05900		EXCH	Z,BEST2
05910		MOVEM	Z,BEST
05920		EXCH	U5,ORDER
05930		MOVEM	U5,ORDER2
05940	SORT22:	TRNN	X2,PMASK
05950		JRST	TIP
05960		MOVE	U1,BRUSH-1(X2)
05970		CAML	U1,DEPTHM
05980		JRST	TIP
05990		JRST	PL1
06000	
06010	PL19:	MOVEM	X4,X4S
06020		CAIE	X4,11
06030		JRST	PL20
06040		MOVEM	X4,BESTO	;NO SECOND SORT NEEDED
06050		SETZM	BPTRO
06060		JRST	PL21
06070	PL20:	PUSHJ	PDP,SORT	;SORT OVERFLOW
06080		MOVEM	X3,BESTO	;SAVE OVERFLOW SORT RESULTS
06090		MOVEM	U3,BPTRO	;SAVE OVERFLOW POINTER
06100	PL21:	MOVEI	X4,10
06110		PUSHJ	PDP,SORT
06120		MOVE	U1,BESTO	;BEST OVERFLOW POINTER
06130		MOVE	Z,BZ-1(U1)	;OVERFLOW BEST Z
06140		MOVE	U2,WORSTM
06150		CAMLE	Z,BZ-1(U2)	;COMPARE WITH MAIN WORST
06160		JRST	PL18		;OVERFLOW CAN BE DISCARDED
06170		MOVE	X4,BESTM
06180		CAMLE	Z,BZ-1(X4)	;IS OVERFLOW BEST REALLY BEST?
06190		JRST	PL22		;NO, TOO BAD, MORE WORK AHEAD
06200		LSHC	X3,-4		;YES, PUT MAIN BEST BACK ON LIST
06210		MOVEM	U3,BPTR-1(X2)
06220		MOVE	X4,U1		;PREPARE TO SAVE TWIGS
06230		MOVEM	U1,BESTM	;CALL THIS BESTM NOW
06240		JRST	MERGE		;GO ON FROM HERE
06250	PL22:	MOVE	X3,U1		;RESTORE BESTO TO ITS LIST
06260		MOVE	U3,BPTRO
06270		LSHC	X3,-4
06280		MOVEM	U3,BPTRO
06290
06300	MERGE:	MOVE	U3,BPTR-1(X2)	;GET BEST 8 TO SAVE
06310		MOVE	U5,BPTRO
06320		JUMPE	U5,PL18
06330		SETZB	X3,X5
06340		SETZB	Q,A
06350		MOVEI	U1,7		;SAVE ONLY 7 MORE
06360		LSHC	X5,4
06370		LSHC	X3,4
06380	MERGE2:	MOVE	Z,BZ-1(X5)
06390	MERGE3:	JUMPE	X5,MERGE4	;DON'T SORT IF THERE ARE NO MORE
06400		CAMG	Z,BZ-1(X3)	;GIVE PREFERENCE TO MAIN
06410		JRST	MERGE6
06420	MERGE4:	IOR	A,X3
06430		LSH	A,4
06440		MOVEI	X3,0
06450		LSHC	X3,4
06460		SOJG	U1,MERGE3
06470	MERGE5:	LSH	A,4
06480		JUMPN	Q,MERGE7
06490		MOVEM	A,BPTR-1(X2)
06500		JRST	PL18
06510	MERGE6:	IOR	A,X5
06520		LSH	A,4
06530		IOR	Q,X5
06540		MOVEI	X5,0
06550		LSHC	X5,4
06560		SOJLE	U1,MERGE5
06570		JUMPN	X5,MERGE2
06580		JRST	MERGE4
06590	MERGE7:	MOVE	U5,A
06600		MOVEI	U1,7
06610		MOVEI	A,0
06620	MERGE8:	MOVEI	X5,0
06630		LSHC	X5,4
06640		CAILE	X5,10
06650		JRST	MERG12
06660		IOR	A,X5
06670		LSH	A,4
06680		SOJG	U1,MERGE8
06690	MERGE9:	LSH	A,4
06700		MOVEM	A,BPTR-1(X2)
06710		JRST	PL18
06720
06730	MERG12:	IOR	A,X3
06740		LSH	A,4
06750		SUBI	X3,1
06760		SUBI	X5,11		;FORM FOR OVERFLOW SPACE
06770		MOVE	X1,X2
06780		LSH	X1,3
06790		IOR	X1,X3
06800		IOR	X5,TRUNK	;GET PROPER TRUNK OVERFLOW NUMBER
06810		MOVE	U2,OVA(X5)	;MOVE DATA FROM OVERFLOW TO MAIN
06820		MOVEM	U2,MA-10(X1)
06830		MOVE	U2,OVP(X5)
06840		MOVEM	U2,MP-10(X1)
06850		MOVE	U2,OVK(X5)
06860		MOVEM	U2,MK-10(X1)
06870		MOVE	U2,OVRF(X5)
06880		MOVEM	U2,MRF-10(X1)
06890		MOVE	U2,OVLF(X5)
06900		MOVEM	U2,MLF-10(X1)
06910		MOVE	U2,OVLB(X5)
06920		MOVEM	U2,MLB-10(X1)
06930		MOVE	U2,OVRB(X5)
06940		MOVEM	U2,MRB-10(X1)
06950		MOVE	U2,OVSKIP(X5)
06960		MOVEM	U2,MSKIP-10(X1)
06970		MOVE	U2,OVE(X5)
06980		MOVEM	U2,ME-10(X1)
06990		MOVE	U2,OVE2(X5)
07000		MOVEM	U2,ME2-10(X1)
07010		SKIPE	TREE
07020		PUSHJ	PDP,TREMRG
07030		MOVEI	X3,0
07040		LSHC	X3,4
07050		SOJG	U1,MERGE8
07060		JRST	MERGE9
07070
07080	TREMRG:	MOVE	U2,OVMOVA(X5)
07090		MOVEM	U2,MMOVA-10(X1)
07100		MOVE	U2,OVMOVP(X5)
07110		MOVEM	U2,MMOVP-10(X1)
07120		POPJ	PDP,
07130
07140
07150	SUBTTL	SORT -- A. SAMUEL
07160	PAGE
07170
07180	;*********************************************
07190	;   SORT IS A ROUTINE THAT SORTS  INDEXES    *
07200	; REFERENCING DATA ARRANGING IN ASSENDING    *
07210	; ORDER THE TAGS CONTAINED IN BZ-1. IT DOES  *
07220	;THIS BY SIMULATING A 4 TAPE SORT IN 4       *
07230	; REGESTERS.                                 *
07240	;*********************************************
07250
07260
07270	SETUPA:	BYTE	(4)0
07280		BYTE	(4)1
07290		BYTE	(4)1
07300		BYTE	(4)1,2
07310		BYTE	(4)1,2
07320		BYTE	(4)1,2,3
07330		BYTE	(4)1,2,3
07340		BYTE	(4)1,2,3,4
07350		BYTE	(4)1,2,3,4
07360		BYTE	(4)11
07370		BYTE	(4)11
07380		BYTE	(4)11,12
07390		BYTE	(4)11,12
07400		BYTE	(4)11,12,13
07410		BYTE	(4)11,12,13
07420		BYTE	(4)11,12,13,14
07430		BYTE	(4)11,12,13,14
07440		
07450	SETUPB:	BYTE	(4)0
07460		BYTE	(4)0
07470		BYTE	(4)2
07480		BYTE	(4)3
07490		BYTE	(4)3,4
07500		BYTE	(4)4,5
07510		BYTE	(4)4,5,6
07520		BYTE	(4)5,6,7
07530		BYTE	(4)5,6,7,10
07540		BYTE	(4)0
07550		BYTE	(4)12
07560		BYTE	(4)13
07570		BYTE	(4)13,14
07580		BYTE	(4)14,15
07590		BYTE	(4)14,15,16
07600		BYTE	(4)15,16,17
07610		BYTE	(4)15,16,17	;HANDLES ONLY 15
07620
07630
07640	SORT:	MOVE	U3,SETUPA(X4)	;SET UP INPUT REGISTERS
07650		MOVE	U5,SETUPB(X4)
07660		SETZB	X3,X5		;ZERO SAMPLING REGISTERS
07670		SETZB	A,K		;ZERO OUTPUT REGISTERS
07680		LSHC	X3,4
07690		LSHC	X5,4
07700	SORTA:	MOVE	Z,BZ-1(X3)
07710		CAMG	Z,BZ-1(X5)	;FIND SMALLEST
07720		JRST	SORT1
07730		EXCH	U3,U5		;SWAP IF NECESSARY
07740		EXCH	X3,X5
07750	SORT1:	MOVE	Q,X3
07760		LSH	A,4		;MAKE ROOM
07770		IOR	A,X3
07780		SETZ	X3,
07790		JUMPE	U3,SORT5	;NO MORE ON U3, USE U5
07800		LSHC	X3,4		;GET NEXT ENTRY
07810		MOVE	Z,BZ-1(X3)
07820		CAMG	Z,BZ-1(X5)
07830		JRST	SORT2
07840		EXCH	X3,X5
07850		EXCH	U3,U5		;MUST SWITCH BOTH
07860	SORT2:	MOVE	Z,BZ-1(Q)	;WILL IT GO
07870		CAMG	Z,BZ-1(X3)
07880		JRST	SORT1		;YES
07890		CAMLE	Z,BZ-1(X5)	;MAYBE X5 WILL GO
07900		JRST	SORT6		;NO, SO SWITCH OUTPUTS
07910	SORT3:	MOVE	Q,X5		;YES, MOVE X5 AND STICK WITH THIS INPUT
07920		LSH	A,4		;MAKE ROOM
07930		IOR	A,X5
07940		SETZ	X5,
07950		JUMPN	U5,SORT4	;ARE THER MORE
07960		JUMPE	X3,SORT7	;END OF PASS
07970		EXCH	X3,X5
07980		EXCH	U3,U5		;SWITCH INPUTS
07990		EXCH	A,K		;SWITCH OUTPUTS
08000		JRST	SORT3		;START WITH ONE
08010	SORT4:	LSHC	X5,4
08020	SORT5:	MOVE	Z,BZ-1(Q)
08030		CAMG	Z,BZ-1(X5)
08040		JRST	SORT3		;CONTINUE WITH U5
08050	SORT6:	EXCH	A,K		;SWITCH OUTPUTS
08060		JUMPN	X3,SORT1	;CONTINUE FROM U3
08070		JRST	SORT3
08080	SORT7:	JUMPE	K,SORT8	;EVERYTHING IS ON A
08090		EXCH	U3,A		;INTERCHANGE IN AND OUT
08100		EXCH	U5,K
08110		LSHC	X3,4
08120		JUMPE	X3,.-1		;LEFT JUSTIFY AND  GET FIRST IN X3
08130		LSHC	X5,4
08140		JUMPE	X5,.-1		;DITTO
08150		JRST	SORTA		;GO AROUND AGAIN
08160	SORT8:	MOVE	U3,A
08170		JUMPE	U3,.+3
08180		LSHC	X3,4
08190		JUMPE	X3,.-1		;LEFT JUSTIFY
08200		MOVEM	X3,BESTM	;SAVE INDEX TO BEST
08210		ANDI	A,17
08220		MOVEM	A,WORSTM	;SAVE INDEX TO WORST
08230		MOVEM	U3,BPTR-1(X2)
08240		POPJ	PDP,
08250
08260
     

00010	SUBTTL	TIP -- A. SAMUEL
00020	PAGE
00030
00040	;*****************************************************
00050	;   TIP IS A PART OF THE MAIN ROUTINE WHICH HANDLES  *
00060	; TIPPING OFF OF A BRANCH. IT IS SIMILAR TO PLAUS IN *
00070	; INPUT REQUIREMENTS BUT IT TRANSFERS CONTROL TO SET.*
00080	;*****************************************************
00090
00100	TIP:	SETOM	FLIT		;STOP FLITTING
00105		SETZM	BUFFFF#
00110		SETZB	X3,X4
00120		MOVE	X1,X2		;PREPARE TO GET BOARD
00130		LSH	X1,3		;START AT FIRST BRANCH
00140		SKIPA
00150	TIP1:	AOS	X4
00160		SETZM	MJW-1
00170		CAIGE	X4,10		;ARE WE USING BOARDS FROM OVERFOLW
00180		JRST	TIP1A		;NO, SO GET BOARD FROM MAIN
00190		CAIG	X4,10
00200		MOVE	X1,TRUNK	;FIRST TIME IN OVERFLOW
00210		SKIPG	OVA(X1)
00220		JRST	SET10		;NO MORE BOARDS
00230		SKIPE	TREE
00240		PUSHJ	PDP,TIPTOV
00250		MOVE	U2,OVSKIP(X1)
00260		MOVE	U1,OVE2(X1)
00270		MOVE	Z,OVE(X1)
00280		JRST	TIP1B
00290	TIP1A:	SKIPG	MA-10(X1)
00300		JRST	SET10		;NO MORE BOARDS
00310		SKIPE	TREE
00320		PUSHJ	PDP,TIPT
00330		MOVE	U2,MSKIP-10(X1)
00340		MOVE	U1,ME2-10(X1)
00350		MOVE	Z,ME-10(X1)
00360	TIP1B:	MOVEM	U2,TISKIP
00370		ADD	U2,PLY-1(X2)
00380		MOVEM	U2,TIPPLY#	;PLY IN X2 MAY OVERFLOW
00390		XOR	U2,SIDE
00400		ANDI	U2,1
00410		SETZM	EEBFLF
00420		MOVEM	U1,EEB2-1(X3)
00430		MOVEM	Z,EEB-1(X3)
00440		MOVE	U1,TISKIP
00450		TRC	U2,1
00460		MOVEM	U2,COLOR
00470		MOVE	U2,X2
00480		ANDI	U2,PMASK
00490		SKIPN	U2
00500		ADDI	U2,PSIZE	;OVERFLOW IS POSSIBLE
00510		MOVEM	U2,U2S		;NEEDED IN TIP7
00520		MOVE	Z,S-1(U2)
00530		TRNN	U1,1		;U1 CONTAINS PROPER SKIP
00540		JRST	TIP1C
00550		MOVEM	Z,ZZ-2(X3)
00560		MOVE	U2,X2
00570		MOVE	U1,PSKIP-2(U2)
00580		TRNN	U1,1
00590		SOJA	U2,.-2
00600		ANDI	U2,PMASK
00610		SKIPN	U2
00620		ADDI	U2,PSIZE
00630		MOVEM	U2,U2SS		;NEEDED IN TIP7
00640		MOVE	Z,S-2(U2)
00650		MOVEM	Z,ZZ-1(X3)
00660		JRST	TIP1D
00670	TIP1C:	MOVEM	Z,ZZ-1(X3)
00680		MOVE	U2,X2
00690		MOVE	U1,PSKIP-2(U2)
00700		TRNN	U1,1
00710		SOJA	U2,.-2
00720		ANDI	U2,PMASK
00730		SKIPN	U2
00740		ADDI	U2,PSIZE
00750		MOVEM	U2,U2SS
00760		MOVE	Z,S-2(U2)
00770		MOVEM	Z,ZZ-2(X3)
00780	TIP1D:	CAIGE	X4,10		;TEST AGAIN
00790		JRST	TIP3
00800		PUSHJ	PDP,OVUP
00810		JRST	TIP7
00820		JRST	TIP4
00830
00840	TIP3:	PUSHJ	PDP,MUP	
00850		JRST	TIP7		;NO MORE MOVES
00860	TIP4:	SKIPE	TREE
00870		PUSHJ	PDP,TIPT2
00880		MOVEM	A,PLA(X3)
00890		MOVEM	P,PLP(X3)
00900		MOVEM	K,PLK(X3)
00910		PUSHJ	PDP,LEGAL
00920		JRST	TIP8		;NO LEGAL MOVES
00930		AOJA	X3,TIP4A
00940		TRNN	X3,1
00950		SETOM	EEBFLF
00960		AOJA	X3,TIP5
00970
00980	TIP4A:	MOVE	Z,EEB-3(X3)
00990		MOVEM	Z,EEB-1(X3)
01000		MOVE	Z,EEB2-3(X3)
01010		MOVEM	Z,EEB2-1(X3)
01020		CAIL	X3,10
01030		SOJA	X3,TIP5E
01040	TIP5:	MOVE	Z,ZZ-3(X3)
01050		MOVEM	Z,ZZ-1(X3)
01060	TIP5A:	PUSHJ	PDP,PUP
01070		JRST	TIP6		;NO MORE MOVES
01080		SKIPE	TREE
01090		PUSHJ	PDP,TIPT3
01100		MOVEM	A,PLA(X3)
01110		MOVEM	P,PLP(X3)
01120		MOVEM	K,PLK(X3)
01130		PUSHJ	PDP,LEGAL
01140		JRST	TIP10		;NO LEGAL MOVE
01150		AOJA	X3,TIP4A		;JUMP MOVE
01160		TRNN	X3,1
01170		SETOM	EEBFLF
01180		CAIL	X3,6
01190		JRST	TIP5E
01200		SKIPN	EEBFLF
01210		AOJA	X3,TIP5		;MUST FIND NECESSARY EV
01220	TIP5E:	PUSHJ	PDP,EVA		;NOW A FULL FINAL EVAL
01230	TIP5C:	SKIPE	TREE
01240		PUSHJ	PDP,TREEMP
01250		MOVM	U5,Z
01260		CAILE	U5,400000	;MARGIN EXEMPTION LEVEL
01270		JRST	.+7
01280		LSH	U5,-4		;DIVIDE BY 16
01290		MOVNS	U5
01300		ADD	U5,Z
01310		CAMLE	U5,ZZ-2(X3)
01320		JRST	TIP5B
01330		JRST	.+3
01340		CAMLE	Z,ZZ-2(X3)	;DOES ALPHA LIKE?
01350		JRST	TIP5B		;YES
01360		SOJG	X3,TIP5A	;NO, SO CAN WE PUP?
01370		JRST	TIP1D		;NO, MUST MUP
01380	TIP5B:	MOVNS	Z		;MUST CHANGE SIGN TO COMPARE WITH BETA
01390		CAMLE	Z,ZZ-1(X3)	;DOES BETA LIKE?
01400		MOVEM	Z,ZZ-1(X3)	;YES, SO WE GET NEW BETA
01410		JRST	TIP5A		;AND TRY A NEW BRANCH
01420
01430	TIP6:	MOVE	Z,ZZ-1(X3)
01440		SUBI	X3,1		;CAN BACK 1 AT LEAST
01450		MOVM	U5,Z
01460		CAILE	U5,400000	;MARGIN EXEMPTION LEVEL
01470		JRST	.+7
01480		LSH	U5,-4		;DIVIDE BY 16
01490		MOVNS	U5
01500		ADD	U5,Z
01510		CAMG	U5,ZZ-2(X3)
01520		JRST	TIP6A
01530		JRST	.+3
01540		CAMG	Z,ZZ-2(X3)	;CAN WE PRUNE?
01550		JRST	TIP6A		;YES, ALPHA  DOES NOT LIKE
01560		MOVNS	Z
01570		CAMLE	Z,ZZ-1(X3)	;DOES BETA LIKE?
01580		MOVEM	Z,ZZ-1(X3)	;YES
01590		JUMPG	X3,TIP5A	;GO TO PUP IF X3 > 0
01600		JRST	TIP1D		;ELSE GO TO MUP
01610	TIP6A:	JUMPG	X3,TIP6B
01620		MOVE	U1,TISKIP
01630		TRNE	U1,1
01640		AOJA	X1,TIP1
01650		MOVE	U1,PSKIP-2(X2)
01660		TRNN	U1,1
01670		SOJA	X2,.-2
01680		JRST	SET
01690
01700	TIP6B:	SOJG	X3,TIP5A
01710		JRST	TIP1D
01720
01730
01740
01750	;AFTER MUP EXHAUSTION
01760	TIP7:	MOVE	Z,ZZ-1(X3)
01770		MOVE	U1,TISKIP
01780		TRNN	U1,1
01790		MOVNS	Z
01800		MOVE	U2,U2SS
01810		MOVM	U5,Z
01820		CAILE	U5,400000	;MARGIN EXEMPTION LEVEL
01830		JRST	.+7
01840		LSH	U5,-4		;DIVIDE BY 16
01850		MOVNS	U5
01860		ADD	U5,Z
01870		CAMLE	U5,S-2(U2)
01880		JRST	TIP7A
01890		JRST	.+3
01900		CAMLE	Z,S-2(U2)
01910		JRST	TIP7A
01920		TRNN	X2,PMASK
01930		SUBI	X2,1		;PLY OVERFLOW CASE
01940		ANDI	X2,PSIZE*20-PSIZE	;ALPHA WANTS NEW SET
01950		ADD	X2,U2		;U2 MAY BE 10
01960		JRST	SET
01970	TIP7A:	MOVNS	Z
01980		MOVE	U2,U2S
01990		CAMLE	Z,S-1(U2)
02000		MOVEM	Z,S-1(U2)
02010		AOJA	X1,TIP1
02020
02030	TIP8:	MOVE	Z,LOSE
02040		ADD	Z,TIPPLY
02050		ADD	Z,X3
02060		SKIPE	TREE
02070		PUSHJ	PDP,TREES
02080		MOVNM	Z,ZZ-1(X3)
02090		JRST	TIP7
02100
02110
02120	TIP10:	MOVE	Z,LOSE
02130		ADD	Z,TIPPLY
02140		ADD	Z,X3
02150		JRST	TIP5C
02160
     

00010	SUBTTL	TREES -- A. SAMUEL
00020	PAGE
00030	SETT3:	MOVE	Z,MOVAA
00040		MOVEM	Z,MMOVA(X1)
00050		MOVE	Z,MOVPP
00060		MOVEM	Z,MMOVP(X1)
00070		POPJ	PDP,
00080
00090	SETT5:	MOVE	Z,MOVAA
00100		MOVEM	Z,OVMOVA(X1)
00110		MOVE	Z,MOVPP
00120		MOVEM	Z,OVMOVP(X1)
00130		POPJ	PDP,
00140
00150	TWIGT:	MOVE	Z,MOVAA
00160		MOVEM	Z,MOVA(X4)
00170		MOVEM	P,MOVP(X4)
00180		POPJ	PDP,
00190
00200	TIPTOV:	MOVE	U3,OVSKIP(X1)
00210		MOVE	U5,OVMOVA(X1)
00220		MOVE	U4,OVMOVP(X1)
00230		MOVE	U2,PLY-1(X2)
00240		MOVEI	U1,[ASCIZ /:/]
00250		MOVEM	U1,DOTFLG
00260		JRST	TRESTR
00270
00280	TIPT:	MOVE	U3,MSKIP-10(X1)
00290		MOVE	U5,MMOVA-10(X1)
00300		MOVE	U4,MMOVP-10(X1)
00310		MOVE	U2,PLY-1(X2)
00320		MOVEI	U1,[ASCIZ /;/]
00330		MOVEM	U1,DOTFLG
00340		JRST	TRESTR
00350
00360	TIPT2:	SKIPE	X3
00370		POPJ	PDP,
00380		MOVE	U5,MOVAA
00390		MOVE	U4,P
00400		MOVE	U2,TIPPLY
00410		MOVEI	U3,1
00420		MOVEI	U1,[ASCIZ / /]
00430		TRNE	U2,1
00440		MOVEI	U1,[ASCIZ /,/]
00450		MOVEM	U1,DOTFLG
00460		JRST	TRESTR
00470
00480	TIPT3:	MOVE	U5,PLA-1(X3)
00490		MOVE	U4,P
00500		MOVE	U2,TIPPLY
00510		ADD	U2,X3
00520		MOVEI	U3,1
00530		MOVEI	U1,[ASCIZ / /]
00540		TRNE	U2,1
00550		MOVEI	U1,[ASCIZ /,/]
00560		MOVEM	U1,DOTFLG
00570		JRST	TRESTR
00580
00590	MAS:	Z
00600
00610	GTREE:	MOVEI	U1,[ASCIZ / /]
00620		MOVEM	U1,DOTFLG
00630		MOVE	U5,IA
00640		MOVE	U4,MOP(X4)
00650		MOVEI	U2,0
00660		MOVEI	U3,1
00670		PUSHJ	PDP,TREE1
00680		MOVEI	U1,[ASCIZ /  TRUNK NUMBER /]
00690		PUSHJ	PDP,PRINT
00700		MOVE	U1,X4
00710		ADDI	U1,1
00720		PUSHJ	PDP,NUMOUT
00730		PUSHJ	PDP,TERPRI
00740		SETZM	BUFFF2
00750		MOVEI	U1,20
00760		MOVEM	U1,TREEX
00770		POPJ	PDP,
00780
00790
00800	STREE:	MOVE	U5,MMOVA-10(X1)
00810		MOVE	U4,MMOVP-10(X1)
00820		MOVE	U2,PLY-1(X2)
00830		MOVE	U3,MSKIP-10(X1)
00840		MOVEI	U1,[ASCIZ / /]
00850		TRNE	U2,1
00860		MOVEI	U1,[ASCIZ /,/]
00870		MOVEM	U1,DOTFLG
00880		JRST	TREE1
00890
00900	FLTREE:	SETOM	PRFLG
00910		MOVEI	U1,[ASCIZ /,/]
00920		MOVEM	U1,DOTFLG
00930		MOVEI	U1,[ASCIZ /   FLIT TO TRUNK /]
00940		PUSHJ	PDP,PRINT
00950		LSH	X4,-3
00960		ADDI	X4,1
00970		MOVE	U1,X4
00980		PUSHJ	PDP,NUMOUT
00990		MOVEI	U1,3
01000		ADDM	U1,TREEX
01010		MOVN	Z,FLITZ
01020		SETZ	X3,
01030		MOVE	U1,LOSE
01040		MOVEM	U1,ZZ-1(X3)
01050		MOVEM	U1,ZZ-2(X3)
01060		JRST	TREES
01070
01080	TRTRE:	PUSHJ	PDP,TERPRI
01090		MOVEI	U1,[ASCIZ /  GOING TO TRUNK /]
01100		PUSHJ	PDP,PRINT
01110		MOVE	U1,X1
01120		PUSHJ	PDP,NUMOUT
01130		PUSHJ	PDP,TERPRI
01140		MOVEI	U1,40
01150		MOVEM	U1,TREEX
01160		POPJ	PDP,
01170
01180	RETREE:	MOVEI	U1,[ASCIZ /   REPLACE TRUNK /]
01190		PUSHJ	PDP,PRINT
01200		MOVE	U1,X4
01210		PUSHJ	PDP,NUMOUT
01220		MOVEI	U1,3
01230		ADDM	U1,TREEX
01240		MOVN	Z,FLITZ
01250		SETZ	X3,
01260		MOVE	U1,LOSE
01270		MOVEM	U1,ZZ-1(X3)
01280		MOVEM	U1,ZZ-2(X3)
01290		JRST	TREES
01300
01310	TREES:	MOVEM	K,ACSAV+16
01320		MOVEI	K,ACSAV
01330		BLT	K,ACSAV+15
01340		MOVE	U2,PLY(X2)	;COMPUTE LAST PLAY
01350		SKIPE	TIPPLY		;X2 MAY BE FALSE IN TIP
01360		MOVE	U2,TIPPLY
01370		ADD	U2,X3
01380		ANDI	U2,1
01390		MOVEM	U2,LASTP
01400		MOVE	U2,TREEX		;PRINT SCORES
01410		CAILE	U2,20
01420		JRST	TREES2
01430		CAIL	U2,20
01440		JRST	.+4
01450		MOVEI	U1,[ASCIZ /      /]
01460		PUSHJ	PDP,PRINT
01470		AOJA	U2,.-4
01480		MOVE	U1,ZZ-1(X3)
01490		MOVE	U2,ZZ-2(X3)
01500		SKIPE	LASTP
01510		EXCH	U1,U2		;REPORT ALWAYS FOR PDP-6
01520		CAME	U1,LOSE
01530		JRST	.+4
01540		MOVEI	U1,[ASCIZ /        /]
01550		PUSHJ	PDP,PRINT
01560		SKIPA
01570		PUSHJ	PDP,SOUT
01580		MOVN	U1,Z
01590		SKIPE	LASTP
01600		MOVNS	U1
01610		PUSHJ	PDP,SOUT
01620		MOVN	U1,U2
01630		CAME	U1,WIN
01640		PUSHJ	PDP,SOUT
01650	TREES2:	PUSHJ	PDP,TERPRI
01660		SETZM	BUFFF2
01670		MOVEI	U1,40
01680		MOVEM	U1,TREEX
01690		MOVSI	K,ACSAV
01700		BLT	K,K
01710		POPJ	PDP,
01720
01730	SOUT:	MOVEM	Z,ZSAV#
01740		CAMLE	U1,BAD
01750		JRST	.+10
01760		SUB	U1,LOSE
01770		ADDI	U1,1
01780		PUSHJ	PDP,SOUT2
01790		MOVEI	U1,[ASCIZ /LOSS/]
01800		PUSHJ	PDP,PRINT
01810		MOVE	Z,ZSAV
01820		POPJ	PDP,
01830		CAMGE	U1,GOOD
01840		JRST	.+11
01850		MOVNS	U1
01860		ADD	U1,WIN
01870		ADDI	U1,1
01880		PUSHJ	PDP,SOUT2
01890		MOVEI	U1,[ASCIZ / WIN/]
01900		PUSHJ	PDP,PRINT
01910		MOVE	Z,ZSAV
01920		POPJ	PDP,
01930		ASH	U1,-5
01940		ADDI	U1,200
01950		MOVEM	U1,U1S
01960		ASH	U1,-10
01970		PUSHJ	PDP,SOUT2
01980		MOVE	U1,U1S
01990		ANDI	U1,377
02000		SUBI	U1,200
02010		PUSHJ	PDP,SOUT2
02020		MOVE	Z,ZSAV
02030		POPJ	PDP,
02040
02050	SOUT2:	SETZ	X2,
02060		MOVM	Z,U1
02070		SKIPGE	U1
02080		SOS	X2
02090		JRST	RJ2
02100
02110	TREEX:	20		;SET LARGE AT START
02120	TREE:	0		;PRINT TREES
02130	UPNUMS:	BLOCK	20
02140
02150	UPNUM:	SOS	U2
02160		MOVEM	K,UPNUMS+16
02170		MOVEI	K,UPNUMS
02180		BLT	K,UPNUMS+15
02190		SETZM	P
02200		SKIPE	DIFF
02210		JRST	UPNUM0
02220		SKIPE	TOTAL
02230		JRST	UPNUM1
02240		MOVE	A,COUNT		;GET NUMBER OF UPDATED BOARDS
02250		CAIGE	A,100000
02260		AOS	P
02270		CAIGE	A,10000
02280		AOS	P
02290		CAIGE	A,1000
02300		AOS	P
02310		CAIGE	A,100
02320		AOS	P
02330		CAIGE	A,10
02340		AOS	P
02350		JUMPE	P,.+4
02360		MOVEI	U1,[ASCIZ / /]
02370		PUSHJ	PDP,PRINT
02380		SOJG	P,.-2
02390		MOVE	U1,A
02400	RAD:	PUSHJ	PDP,OCT2
02410		MOVSI	K,UPNUMS
02420		BLT	K,K
02430		POPJ	PDP,
02440	UPNUM0:	SETZM	A
02450		CALL	A,[SIXBIT /RUNTIME/]
02460		MOVE	U1,DIFFT
02470		MOVEM	A,DIFFT
02480		SUB	A,U1
02490		JRST	.+4
02500	UPNUM1:	SETZM	A
02510		CALL	A,[SIXBIT /RUNTIME/]
02520		SUB	A,TIME
02530		CAIGE	A,↑D100000
02540		AOS	P
02550		CAIGE	A,↑D10000
02560		AOS	P
02570		CAIGE	A,↑D1000
02580		AOS	P
02590		CAIGE	A,↑D100
02600		AOS	P
02610		CAIGE	A,↑D10
02620		AOS	P
02630		JUMPE	P,.+4
02640		MOVEI	U1,[ASCIZ / /]
02650		PUSHJ	PDP,PRINT
02660		SOJG	P,.-2
02670		MOVE	U1,A
02680		PUSHJ	PDP,NUMOUT
02690		JRST	RAD+1
02700
02710	CTELLC:	SETCMM	TELLC
02720		POPJ	PDP,
02730
02740	DEBUG:	SETCMM	TELLC
02750		PUSHJ	PDP,LPTREE
02760		POPJ	PDP,
02770
02780	TELLC:	Z
02790
02800	MTRE:	MOVE	U3,BRUSH(X2)
02810		LSH	U3,1
02820		CAML	U3,DEPTHM
02830		AOSA	PRFLG#
02840		SETOM	PRFLG
02850		MOVE	U5,MVAA(X4)
02860		MOVE	U4,MVPP(X4)
02870		MOVE	U2,PLY-1(X2)
02880		MOVE	U3,MMSKIP(X4)
02890		MOVEI	U1,[ASCIZ / /]
02900		TRNE	U2,1
02910		MOVEI	U1,[ASCIZ /,/]
02920		MOVEM	U1,DOTFLG
02930	TREE1:	XOR	U5,U4
02940		AND	U4,U5
02950		XOR	U5,U4		;YES, HE REALLY MEANS IT!
02960		CAML	U2,TREEX
02970		JRST	TREE2
02980		SKIPN	BUFFF2
02990		JRST	.+4
03000		MOVEI	U1,[ASCIZ /   #  /]
03010		PUSHJ	PDP,PRINT
03020		PUSHJ	PDP,TERPRI
03030		SETOM	BUFFF2
03040		MOVEM	U2,TREEX
03050		JUMPLE	U2,.+7
03060		SKIPE	TELLC
03070		PUSHJ	PDP,UPNUM
03080		JUMPLE	U2,.+4
03090		MOVEI	U1,[ASCIZ /      /]
03100		PUSHJ	PDP,PRINT
03110		SOJG	U2,.-2
03120	TREE2:	MOVE	U1,DOTFLG
03130		SKIPN	PRFLG
03140		MOVEI	U1,[ASCIZ /!/]
03150		PUSHJ	PDP,PRINT
03160		ADDM	U3,TREEX
03170		PUSHJ	PDP,FIND
03180		MOVE	U5,U1
03190		CAIL	U1,12
03200		JRST	.+3
03210		MOVEI	U1,[ASCIZ / /]
03220		PUSHJ	PDP,PRINT
03230		MOVE	U1,U5
03240		PUSHJ	PDP,NUMOUT
03250		MOVEI	U1,[ASCIZ /-/]
03260		PUSHJ	PDP,PRINT
03270		MOVE	U5,U4
03280		PUSHJ	PDP,FIND
03290		MOVE	U5,U1
03300		PUSHJ	PDP,NUMOUT
03310		CAIL	U5,12
03320		JRST	.+3
03330		MOVEI	U1,[ASCIZ / /]
03340		PUSHJ	PDP,PRINT
03350		SUBI	U3,1		;ALLOW FOR REPORTABLE BOARD
03360		JUMPLE	U3,.+4		;NO J'S NEEDED
03370		MOVEI	U1,[ASCIZ /   J  /]
03380		PUSHJ	PDP,PRINT
03390		SOJG	U3,.-2
03400		POPJ	PDP,
03410
03420	CORR:	JRST	NOTICE
03430
03440	TREEMP:	SKIPE	BUFFF		;EXPANDED TIPS
03450		JRST	TREES		;YES
03452		SKIPE	BUFFFF
03454		JRST	.+3
03456		SETOM	BUFFFF
03458		JRST	.+6
03460		MOVN	U1,Z
03470		CAMG	U1,ZZ-1(X3)
03480		POPJ	 PDP,		;OMIT THIS LINE
03490		CAMG	Z,ZZ-2(X3)
03500		POPJ	PDP,		;OMIT THIS LINE
03510		SETZM	BUFFF3		;BUFF IS TO BE PRINTED
03520		SKIPE	BUFFF2
03530		JRST	.+11
03540		MOVE	U2,TREEX	;LINE HAS JUST BEEN EMPTIED
03550		JUMPLE	U2,.+7
03560		SKIPE	TELLC
03570		PUSHJ	PDP,UPNUM
03580		JUMPLE	U2,.+4
03590		MOVEI	U1,[ASCIZ /      /]
03600		PUSHJ	PDP,PRINT
03610		SOJG	U2,.-2
03620		SETZ	U3,
03630	TREMP1:	MOVE	U1,BUFF(U3)
03640		JUMPE	U1,TREES	;BUFF IS EMPTY
03650		HRRZ	U1,BUFF(U3)
03660		PUSHJ	PDP,PRINT
03670		HLRZ	U5,BUFF(U3)
03680		JUMPE	U5,TREMP3
03690		LSH	U5,-6
03700		CAIL	U5,12
03710		JRST	.+3
03720		MOVEI	U1,[ASCIZ / /]
03730		PUSHJ	PDP,PRINT
03740		MOVE	U1,U5
03750		PUSHJ	PDP,NUMOUT
03760		MOVEI	U1,[ASCIZ /-/]
03770		PUSHJ	PDP,PRINT
03780		HLRZ	U5,BUFF(U3)
03790		SETZM	BUFF(U3)
03800		ANDI	U5,77
03810		MOVE	U1,U5
03820		PUSHJ	PDP,NUMOUT
03830		CAIL	U5,12
03840		JRST	.+3
03850		MOVEI	U1,[ASCIZ / /]
03860		PUSHJ	PDP,PRINT
03870	TREMP3:	AOS	TREEX
03880		AOJA	U3,TREMP1
03890
03900	TRESTR:	SKIPE	BUFFF		;EXPAND TIPS
03910		JRST	TREE1		;YES
03920		MOVEM	X1,X1S
03930		XOR	U5,U4
03940		AND	U4,U5
03950		XOR	U5,U4
03960		SKIPE	BUFFF3		;WAS BUFF PRINTED
03970		JRST	TREST2
03980		MOVEI	X1,17		;YES SO EMPTY
03990		SETZM	BUFF(X1)
04000		SOJGE	X1,.-1
04010		SETZB	X1,BUFFX
04020		MOVEM	U2,TREEX
04030		JRST	TREST3
04040	TREST2:	MOVE	X1,BUFFX
04050		MOVE	U1,X1
04060		ADD	U1,TREEX
04070		CAML	U2,U1
04080		JRST	.+5
04090		SETZM	BUFF(X1)
04100		SKIPE	X1
04110		SOJGE	X1,.-6
04120		MOVEM	U2,TREEX
04130	TREST3:	MOVE	U1,DOTFLG
04140		MOVEM	U1,BUFF(X1)
04150		PUSHJ	PDP,FIND
04160		LSH	U1,30
04170		IORM	U1,BUFF(X1)
04180		MOVE	U5,U4
04190		PUSHJ	PDP,FIND
04200		LSH	U1,22
04210		IORM	U1,BUFF(X1)
04220		ADDI	X1,1
04230		SUBI	U3,1
04240		JUMPLE	U3,.+5
04250		MOVEI	U1,[ASCIZ /   J  /]
04260		MOVEM	U1,BUFF(X1)
04270		ADDI	X1,1
04280		SOJG	U3,.-2
04290		MOVEM	X1,BUFFX
04300		MOVE	X1,X1S
04310		SETOM	BUFFF3		;NEW DATA IN BUFF
04320		POPJ	PDP,
04330
04340	BUFFX:	Z		;BUFFER INDEX
04350	BUFFF:	Z		;NON-ZERO TO EXPAND TIPS
04360	BUFFF2:	Z		;LINE TERPRI FLAG
04370	BUFFF3:	Z		;ANOTHER LINE TER FLAG
04380	BUFF:	BLOCK	20	;TREE BUFFER
     

00010		SUBTTL	CHECKERS I/O -- B. PITTS
00020		PAGE
00030		LIST
00040
00050	;**************************************************************
00060	;  THESE I/O ROUTINES USE REGISTERS U1, U2, U3, U4, U5, X4,   }
00070	;AND PDP.  REGISTERS X1, X2, X3, AND X5 ARE USED BY OTHER     }
00080	;ROUTINES (SAUTER'S) WHICH ARE CALLED BY THESE ROUTINES.      }
00090	;**************************************************************
00100
00110
00120	;MOVIN IS CALLED BY THE INTERPRETER WHEN A NUMBER IS
00130	;ENCOUNTERED AS THE FIRST ELEMENT OF A COMMAND.  
00140
00150	MOVIN:	PUSHJ	PDP,SETLEG	;FIX ORF, ETC. FOR NEXT MOVE
00160		MOVE	U2,[POINT 4,MJ]
00170		MOVEM	U2,MJBP		;INIT BYTE POINTER
00180		MOVE	U2,[POINT 6,MJBP,5]
00190		MOVEM	U2,BPBP		;INIT BYTE POINTER'S BYTE POINTER
00200		MOVEI	I,300
00210		HRLZI	U3,400000
00220		HRRZS	U1
00230		PUSHJ	PDP,OUTIN	;FIX THE NUMBER
00240		MOVN	U4,U1
00250		LSH	U3,(U4)		;MOVE BIT NOW IN PROPER POSITION
00260		PUSHJ	PDP,SCAN	;GET SEPARATER
00270		TLNE	U1,-1		;NUMBER OR IDENTIFIER?
00280		JRST	.+3		;NUMBER, SPACE OR "," MUST HAVE BEEN DELIMITER
00290		PUSHJ	PDP,EOL		;GET THE NEXT NUMBER
00300		JRST	ERR
00310		PUSHJ	PDP,OUTIN	;FIX THE NUMBER
00320		MOVE	U2,U1
00330		ADD	U4,U2
00340		MOVM	U1,U4
00350		CAIGE	U1,6		;IS HE TRYING TO MAKE A JUMP?
00360		JRST	MOVIN0		;NO
00370		SKIPE	OJ		;DID LEGALS FIND JUMP MOVES?
00380		JRST	.+3		;YES
00390		MOVEI	U1,[ASCIZ /JUMP?/]
00400		JRST	IMP+1
00410		ASH	U4,-1
00420		JRST	MOVIN1
00430	MOVIN0:	SKIPN	OJ		;IS IT A JUMP MOVE?
00440		JRST	MOVIN1		;NO
00450		MOVEI	U1,[ASCIZ /JUMP!/]
00460		JRST	IMP+1
00470	MOVIN1:	SETZB	X4,X3
00480		JUMPL	U4,MOVIN3
00490		CAIE	U4,4
00500		JRST	MOVIN2
00510		MOVE	U1,ORF
00520		TDNN	U1,U3		;IS IT A LEGAL MOVE?
00530		JRST	IMP		;NO
00540		JRST	MORE
00550	MOVIN2:	CAIE	U4,5
00560		JRST	IMP
00570		MOVE	U1,OLF
00580		TDNN	U1,U3		;IS IT A LEGAL MOVE?
00590		JRST	IMP		;NO
00600		JRST	MORE
00610	MOVIN3:	TLZ	U4,777777
00620		CAIE	U4,-4
00630		JRST	MOVIN4
00640		TLO	U4,777777
00650		MOVE	U1,OLB
00660		TDNN	U1,U3		;IS IT A LEGAL MOVE?
00670		JRST	IMP		;NO
00680		JRST	MORE
00690	MOVIN4:	CAIE	U4,-5
00700		JRST	IMP
00710		TLO	U4,777777
00720		MOVE	U1,ORB
00730		TDNN	U1,U3		;IS IT A LEGAL MOVE?
00740		JRST	IMP		;NO
00750	MORE:	PUSHJ	PDP,SCAN
00760		SKIPN	ACCFLG
00770		JRST	.+5
00780		MOVEI	U2,MOVIT-1
00790		CAIN	U1,15
00800		MOVEM	U2,(PDP)
00810		CAIE	U1,","
00820		TLZN	U1,400000
00830		JRST	MKMOV
00840		PUSHJ	PDP,OUTIN	;FIX THE NUMBER
00850		MOVN	U5,U2	
00860		ADD	U5,U1
00870		ASH	U5,-1
00880		ROT	X4,(X3)
00890		JUMPL	U5,MOVIN6
00900		CAIE	U5,4		;RFMJ?
00910		JRST	MOVIN5		;NO, BUT MAYBE LFMJ
00920		TLO	X4,40000	;SET RF BIT
00930		JRST	MOVIN8
00940	MOVIN5:	CAIE	U5,5		;LFMJ?
00950		JRST	IMP		;ILLEGAL MOVE
00960		TLO	X4,100000	;SET LF BIT
00970		JRST	MOVIN8
00980	MOVIN6:	TLZ	U5,777777	;SO THAT THE NEXT INSTR. WILL WORK
00990		CAIE	U5,-4		;LBMJ?
01000		JRST	MOVIN7		;NO, BUT MAYBE RBMJ
01010		TLO	U5,777777	;UNDOES THAT WHICH HAS BEEN DONE
01020		TLO	X4,200000	;SET LB BIT
01030		JRST	MOVIN8
01040	MOVIN7:	CAIE	U5,-5		;RBMJ?
01050		JRST	IMP		;ILLEGAL MOVE
01060		TLO	U5,777777
01070		TLO	X4,400000	;SET RB BIT
01080	MOVIN8:	MOVNS	X3
01090		ROT	X4,(X3)
01100		MOVMS	X3
01110		ADDI	X3,4
01120		MOVE	U2,U1
01130		JRST	MORE
01140	MKMOV:	AOS	FSTCR
01150		MOVEM	X4,MJW
01160		MOVE	U1,U3
01170		MOVE	A,OA		;LOAD BOARD INTO A, P, AND K
01180		MOVE	P,OP
01190		MOVE	K,OK
01200		AOS	SI
01210		MOVN	U2,U4
01220		MOVE	X5,MJW
01230		MOVEI	X3,1
01240		PUSHJ	PDP,UPDATE+2	;UPDATE
01250		MOVEM	A,IA		;STORE BOARD
01260		MOVEM	P,IP
01270		MOVEM	K,IK
01280		MOVEM	A,OA
01290		MOVEM	P,OP
01300		MOVEM	K,OK
01310		SKIPE	ACCFLG#
01320		POPJ	PDP,
01330	MKPLAY:	PUSHJ	PDP,SAVBD	;SAVE BOARD POSITION
01340		SETCMM	LPFLAG
01350		SETZM	Z
01360		CALL	Z,[SIXBIT /RUNTIME/]
01370		MOVEM	Z,TIME
01380		MOVE	A,OA		;ADDED FEB 25 70
01390		MOVE	P,OP
01400		MOVE	K,OK
01410		PUSHJ	PDP,PLAY	;NOW GO PLAY CHECKERS
01420
01430
01440	;MOVOUT IS CALLED BY THE CHECKER PROGRAM AFTER IT HAS FINALLY
01450	;DECIDED WHAT TO DO.
01460
01470	MOVOUT:		SETZM	Z
01480		CALL	Z,[SIXBIT /RUNTIME/]
01490		SUB	Z,TIME
01500		MOVEM	Z,TIME
01510		MOVE	A,OA
01520		MOVE	P,OP
01530		MOVE	K,OK
01540		MOVE	U2,U1
01550		MOVE	U3,U1
01560		SKIPE	HEADFL
01570		PUSHJ	PDP,HEAD
01580		MOVE	U1,SI		;GET MOVE INDEX
01590		PUSHJ	PDP,NUMOUT	;WRITE MOVE INDEX
01600		MOVEI	U1,[ASCIZ /	/]
01610		PUSHJ	PDP,PRINT	;WRITE TAB
01620		HLRZ	U1,U3		;GET STARTING POSITION
01630		PUSHJ	PDP,NUMOUT
01640		MOVEI	U1,[ASCIZ /-/]
01650		PUSHJ	PDP,PRINT	;PRINT HYPHEN
01660		HRRZ	U1,U3		;GET DESTINATION POSITION
01670		PUSHJ	PDP,NUMOUT
01680		MOVEI	U1,[ASCIZ /	/]
01690		PUSHJ	PDP,PRINT
01700		MOVE	U1,COUNT
01705		PUSHJ	PDP,RJOUT
01710		MOVEI	U1,[ASCIZ /./]
01715		PUSHJ	PDP,PRINT
01720		SKIPE	SFLAG
01725		PUSHJ	PDP,TELLS
01730		SKIPE	DWFLAG
01735		PUSHJ	PDP,TELLDW
01740		SKIPE	RUNT
01745		PUSHJ	PDP,RUNT+1
01750		SKIPE	USEBOK
01755		JRST	MOVOUZ
01760		MOVE	U1,U2MAX
01765		PUSHJ	PDP,RJOUT
01770		MOVE	U1,TIMEX
01775		LSH	U1,11
01780		PUSHJ	PDP,RJOUT
01785		PUSHJ	PDP,TERPRI
01790		MOVEI	X3,1
01792		MOVEI	U1,[ASCIZ /       /]
01793		PUSHJ	PDP,PRINT
01795	MOVOUX:	MOVE	U2,MOVXZ(X3)
01800		JUMPL	U2,MOVOUY
01815		MOVEI	U1,[ASCIZ /  /]
01820		PUSHJ	PDP,PRINT
01825		HLRZ	U1,MOVES(U2)
01830		CAIL	U1,12
01835		JRST	.+4
01840		MOVEI	U1,[ASCIZ / /]
01845		PUSHJ	PDP,PRINT
01850		HLRZ	U1,MOVES(U2)
01851		PUSHJ	PDP,NUMOUT
01852		MOVEI	U1,[ASCIZ /-/]
01853		PUSHJ	PDP,PRINT
01860		HRRZ	U1,MOVES(U2)
01865		CAIL	U1,12
01867		JRST	.+4
01870		MOVEI	U1,[ASCIZ / /]
01875		PUSHJ	PDP,PRINT
01881		HRRZ	U1,MOVES(U2)
01882		PUSHJ	PDP,NUMOUT
01883		AOJA	X3,MOVOUX
01884	MOVOUY:	PUSHJ	PDP,TERPRI
01889		SETZ	X3,
01890		JRST	.+2
01900		PUSHJ	PDP,RJOUT
01910		SKIPE	U1,DEPTHZ(X3)
01920		AOJA	X3,.-2
01930		PUSHJ	PDP,TERPRI
01940		SETZ	X3,
01950		JRST	.+3
01960		SUB	U1,COUNTZ-2(X3)
01970		PUSHJ	PDP,RJOUT
01980		SKIPE	U1,COUNTZ(X3)
01990		AOJA	X3,.-3
02000	MOVOUZ:	SKIPG	LPFLAG
02010		JRST	.+6
02020		MOVEI	X1,14
02030		PUSHJ	PDP,TYO
02040		SETCMM	LPFLAG
02050		MOVE	U1,U2
02060		JRST	MOVOUT+10
02070		SETZM	COUNT
02080		AOS	SI
02090		PUSHJ	PDP,SAVBD
02100		JRST	TERPRI
02110
02120	SUM:	SETZB	X4,SI
02130		SETZM	HEADFL
02140		PUSHJ	PDP,TERPRI
02150		AOS	U4,SI
02160		SKIPN	U5,SP+1(U4)
02170		JRST	SUM1
02180		MOVE	P,U5
02190		XOR	U5,SA(U4)
02200		PUSHJ	PDP,FINDM+2
02210		PUSHJ	PDP,MOVOUT+2
02220		JRST	SUM+3
02230	SUM1:		MOVE	U1,U4
02240		JRST	GO+5
02250
02260
02270	HEAD:	PUSHJ	PDP,TERPRI
02280		PUSHJ	PDP,TERPRI
02290		PUSHJ	PDP,TERPRI
02300		SKIPLE	LPFLAG
02310		POPJ	PDP,
02320		SETZM	HEADFL
02330		MOVEI	U1,[ASCIZ /	MOVE   # OF BDS/]
02340		PUSHJ	PDP,PRINT
02350		MOVEI	U1,[ASCIZ /    PIECE   EVAL/]
02360		SKIPE	SFLAG
02370		PUSHJ	PDP,PRINT
02380		MOVEI	U1,[ASCIZ /   TIME/]
02390		SKIPE	RUNT
02400		PUSHJ	PDP,PRINT
02410		PUSHJ	PDP,TERPRI
02420		PUSHJ	PDP,TERPRI
02430		POPJ	PDP,
02440
02450	SAVBD:	MOVE	X5,SI
02460		CAIL	X5,100		;LIMIT OF TABLE SIZE
02470		POPJ	PDP,
02480		MOVEM	A,SA(X5)
02490		MOVEM	P,SP(X5)
02500		MOVEM	K,SK(X5)
02510	RECOUT:	INIT	12,17
02520		SIXBIT	/DSK/
02530		Z
02540		HALT
02550		SETZM	GAMESV+3
02560		ENTER	12,GAMESV
02570		HALT
02580		OUTPUT	12,RECORD
02590		RELEAS	12,
02600		POPJ	PDP,
02610
02620	RECIN:	INIT	12,17
02630		SIXBIT	/DSK/
02640		Z
02650		SETZM	GAMESV+3
02660		LOOKUP	12,GAMESV
02670		JRST	.+4
02680		INPUT	12,RECORD
02690		RELEAS	12,
02700		POPJ	PDP,
02710		MOVEI	U1,[ASCIZ /GAME FILE NOT FOUND./]
02720		PUSHJ	PDP,PRINT
02730		JRST	TERPRI
02740
02750	RECORD:	IOWD	100,SA
02760		Z
02770	
02780	GAMESV:	SIXBIT	/GAME/
02790		SIXBIT	/CHK/
02800		0
02810		SIXBIT	/  2ALS/
02820	
02830
02840	IMP:	MOVEI	U1,[ASCIZ /IMP!/]
02850		PUSHJ	PDP,PRINT
02860		PUSHJ	PDP,TERPRI
02870		PUSHJ	PDP,TERPRI
02880		POPJ	PDP,
02890
02900		PAGE
02910
02920	;****************************************************************
02930	;ACCEPT WILL ACCEPT A STARTING BOARD POSITION FROM THE TTY.     *
02940	;NO ERROR CHECKING IS DONE AGAINST STARTING WITH A BOARD WITH   *
02950	;MORE THAN 12 BLACK OR WHITE PIECES.  THUS, AN OPPONENT CAN     *
02960	;GIVE THE MACHINE A HANDICAP BY GIVING HIMSELF 13 OR 14 PIECES. *
02970	;                                                               *
02980	;REGISTERS U1, U3, U4, U5, X1, X2, AND X3 ARE DESTROYED BY      *
02990	;ACCEPT.                                                        *
03000	;****************************************************************
03010
03020	ACCEPT:	SETZM	FSTCR
03030		PUSHJ	PDP,TERPRI
03040		PUSHJ	PDP,TERPRI
03050		SETZM	U5
03060		PUSHJ	PDP,EOL		;GOBBLE UP CR IN BUFFER
03070		SKIPA
03080		JRST	ACCMOV
03090		MOVEI	U1,[ASCIZ /BLACK PIECES ON: /]
03100		PUSHJ	PDP,PRINT
03110		PUSHJ	PDP,ACC		;READ IN BLACK PIECES
03120		MOVEM	U3,OA		;STORE BLACK PIECES
03130		MOVEI	U1,[ASCIZ /WHITE PIECES ON: /]
03140		PUSHJ	PDP,PRINT
03150		PUSHJ	PDP,ACC		;NOW READ IN WHITE PIECES
03160		MOVEI	U1,[ASCIZ /BLACK TO PLAY? /]
03170		PUSHJ	PDP,PRINT
03180		MOVEI	U1,1
03190		MOVEM	U1,SI
03200		PUSHJ	PDP,NOYES
03210		AOSA	SI
03220		JRST	.+3		;BLACK IS TO PLAY
03230		EXCH	U3,OA
03240		SETZM	SIDE
03250		MOVEM	U3,OP		;STORE WHITE PIECES
03260		MOVEM	U5,OK
03270		MOVE	A,OA
03280		MOVE	P,OP
03290		MOVE	K,OK
03300		PUSHJ	PDP,SAVBD
03310		PUSHJ	PDP,TERPRI
03320		PUSHJ	PDP,TERPRI
03330		POPJ	PDP,
03340	ACC:	SETZM	U3
03350	ACC1:	HRLZI	U4,400000
03360	ACC2:	PUSHJ	PDP,SCAN
03370		CAIN	U1,15		;CR?
03380		POPJ	PDP,		;YES
03390		TLZE	U1,400000	;NUMBER?
03400		JRST	ACC3		;YES
03410		HRRZS	U1		;GET RID OF LEFT HALF FLAG BITS
03420		CAIN	U1,K		;IF A KING ...
03430		TDO	U5,U4		; ... SET KING BIT
03440		JRST	ACC1
03450	ACC3:	PUSHJ	PDP,OUTIN	;CONVERT TO INTERNAL NUMBERS
03460		MOVNS	U1
03470		ROT	U4,(U1)		;ROTATE TO BIT'S POSITION
03480		TDO	U3,U4		;SET PIECE'S BIT
03490		JRST	ACC2
03500
03510	ACCMOV:	SETOM	ACCFLG
03520		PUSHJ	PDP,MOVIN
03530		PUSHJ	PDP,MOVIT
03540		PUSHJ	PDP,EOL
03550		AOSA	ACCFLG
03560		JRST	.-4
03570		POPJ	PDP,
03580
03590		SETZM	ACCFLG
03600	MOVIT:	MOVEI	U1,1
03610		XORM	U1,SIDE
03620		MOVEM	A,OA
03630		MOVEM	P,OP
03640		MOVEM	K,OK
03650		POPJ	PDP,
03660
03670
03680		PAGE
03690
03700	;********************************************
03710	;GO WILL INITIATE PLAY AT THE BOARD SPECIFIED
03720	;********************************************
03730
03740	GO:	PUSHJ	PDP,TERPRI
03750		PUSHJ	PDP,EOL
03760		SOS	U1,SI
03770		CAIGE	U1,1		;NUMBER IN PERMISSABLE RANGE?
03780		JRST	ERRGO		;NO
03790		MOVEM	U1,SI		;STORE NEW INDEX
03800		MOVE	A,SA(U1)	;GET BOARD
03810		MOVE	P,SP(U1)
03820		MOVE	K,SK(U1)
03830		MOVEM	A,OA
03840		MOVEM	P,OP
03850		MOVEM	K,OK
03860		SETZM	SIDE
03870		TRNN	U1,1
03880		AOS	SIDE
03890		POPJ	PDP,
03900
03910	ERRGO:	MOVEI	U1,[ASCIZ /BOARD OUT OF RANGE./]
03920		PUSHJ	PDP,PRINT
03930		PUSHJ	PDP,TERPRI
03940		POPJ	PDP,
03950
03960	PB:	MOVE	U1,SI
03970		TRNN	U1,1
03980		POPJ	PDP,
03990		SETZM	SIDE
04000		PUSHJ	PDP,TERPRI
04010		PUSHJ	PDP,PDP16
04020		MOVEI	U1,[ASCIZ / IS NOW PLAYING BLACK./]
04030		PUSHJ 	PDP,PRINT
04040		PUSHJ	PDP,TERPRI
04050		AOS	FSTCR
04060		JRST	MKPLAY
04070
04080	PW:	MOVE	U1,SI
04090		TRNE	U1,1
04100		POPJ	PDP,
04110		SKIPN	SIDE
04120		AOS	SIDE
04130		PUSHJ	PDP,TERPRI
04140		PUSHJ	PDP,PDP16
04150		MOVEI	U1,[ASCIZ / IS NOW PLAYING WHITE./]
04160		JRST	PB+7
04170
04180
04190	SETB:	MOVEI	U1,[ASCIZ /BLACK = /]
04200		PUSHJ	PDP,PRINT
04210		PUSHJ	PDP,OCTIN
04220		MOVEM	U1,BTERMS
04230		PUSHJ	PDP,TERPRI
04240		POPJ	PDP,
04250
04260	SETW:	MOVEI	U1,[ASCIZ /WHITE = /]
04270		PUSHJ	PDP,PRINT
04280		PUSHJ	PDP,OCTIN
04290		MOVEM	U1,WTERMS
04300		PUSHJ	PDP,TERPRI
04310		POPJ	PDP,
04320
04330	BTERMS:	777777
04340	WTERMS:	777777
04350
04360	PC:	SETZM	CFLAG
04370		SETZM	BTERMS
04380		SETZM	WTERMS
04390		POPJ	PDP,
04400
04410	SIG:	MOVEI	U2,777777
04420		MOVEM	U2,BTERMS
04430		MOVEM	U2,WTERMS
04440		MOVEM	U2,CFLAG
04450		POPJ	PDP,
04460
04470
04480	PORT:	MOVEI	X1,15
04490		CAMN	X1,LASCAR	;LASCAR A <CR>?
04500		POPJ	PDP,		;YES, SO RETURN FOR SET BOTH
04510		PUSHJ	PDP,TYI		;NO, SO GET NEXT CHAR. FROM TTY
04520		CAIN	U1," "		;A SPACE?
04530		JRST	PORT		;YES, SO TRY AGAIN
04540		AOS	(PDP)
04550		AOS	(PDP)		;SET RETURN ADDRESS FOR TIP ONLY
04560		CAIN	U1,"T"		;"T" FOR "TIP"?
04570		POPJ	PDP,		;YES, SO RETURN
04580		AOS	(PDP)
04590		AOS	(PDP)
04600		CAIN	U1,"P"		;"P" FOR "PLAUS"?
04610		POPJ	PDP,
04620		AOS	(PDP)
04630		AOS	(PDP)
04640		POPJ	PDP,		;FLITEV RETURN
04650
04660	PDP16:	MOVEI	U1,[ASCIZ /THE PDP-/]
04670		PUSHJ	PDP,PRINT
04680		PUSHJ	PDP,MTYPE
04690		PUSHJ	PDP,NUMOUT
04700		POPJ	PDP,
04710
04720
04730		PAGE
04740
04750	;************************************************************
04760	;BDOUT WILL PRINT OUT THE CURRENT BOARD IN PICTURE FORMAT.  *
04770	;BDOUT USES REGISTERS A, P, K, U1, U2, U4, U5, X3, AND X4.  *
04780	;REGISTERS A, P, AND K ARE NOT DESTROYED BY BDOUT           *
04790	;************************************************************
04800
04810	BDOUT:	MOVE	A,OA
04820		MOVE	P,OP
04830		MOVE	K,OK
04840		PUSHJ	PDP,TERPRI
04850		SETZB	X4,U2
04860		SETZM	X3
04870		MOVE	U4,A
04880		MOVE	U5,P
04890		AND	U4,K		;ACTIVE KINGS
04900		AND	U5,K		;PASSIVE KINGS
04910		PUSHJ	PDP,BORDER
04920		PUSHJ	PDP,TERPRI
04930		PUSHJ	PDP,PSTAR
04940	AGAIN:	PUSHJ	PDP,PPLUS	;PRINT + SIGN
04950		TRNN	U2,7
04960		JRST	CRLFCK
04970	AGAIN1:	ROT	A,-1
04980		ROT	U4,-1
04990		ROT	P,-1
05000		ROT	U5,-1
05010		TLNN	U4,400000	;BK?
05020		JRST	.+3
05030		PUSHJ	PDP,PBK
05040		JRST	BDOUT1
05050		TLNN	A,400000	;BM?
05060		JRST	.+3		;NO
05070		PUSHJ	PDP,PBM
05080		JRST	BDOUT1
05090		TLNN	U5,400000	;WK?
05100		JRST	.+3		;NO
05110		PUSHJ	PDP,PWK
05120		JRST	BDOUT1
05130		TLNN	P,400000	;WM?
05140		JRST	.+3		;NO
05150		PUSHJ	PDP,PWM
05160		JRST	BDOUT1
05170		PUSHJ	PDP,PHYFEN	;EMPTY SQUARE
05180	BDOUT1:	AOS	X4
05190		CAIN	X4,↑D8		;SHIFT OVER BITS 9, 18, 27
05200		JRST	BDOUT2
05210		CAIN	X4,↑D17
05220		JRST	BDOUT2
05230		CAIE	X4,↑D26
05240		JRST	CRLFCK
05250	BDOUT2:	ROT	A,-1
05260		ROT	U4,-1
05270		ROT	P,-1
05280		ROT	U5,-1
05290		AOS	X4
05300	CRLFCK:	TRNE	U2,7		;DO WE WANT A CR-LF?
05310		JRST	AGAIN		;NO
05320		PUSHJ	PDP,PSTAR
05330		PUSHJ	PDP,TERPRI
05340		SETCMM	X3
05350		JUMPGE	X3,.+3
05360		PUSHJ	PDP,PSTAR
05370		JRST	AGAIN1
05380		CAIE	U2,↑D64
05390		JRST	AGAIN-1
05400		PUSHJ	PDP,BORDER
05410		PUSHJ	PDP,TERPRI
05420		PUSHJ	PDP,TERPRI
05430		ROT	A,-1
05440		ROT	P,-1
05450		POPJ	PDP,
05460
05470	PPLUS:	MOVEI	U1,[ASCIZ /+ /]
05480		PUSHJ	PDP,PRINT
05490		AOS	U2
05500		POPJ	PDP,
05510
05520	BORDER:	MOVEI	U1,[ASCIZ /* * * * * * * * * */]
05530		PUSHJ	PDP,PRINT
05540		POPJ	PDP,
05550
05560	PSTAR:	MOVEI	U1,[ASCIZ /* /]
05570		PUSHJ	PDP,PRINT
05580		POPJ	PDP,
05590
05600	PHYFEN:	MOVEI	U1,[ASCIZ /  /]
05610		PUSHJ	PDP,PRINT
05620		AOS	U2
05630		POPJ	PDP,
05640
05650	PBM:	MOVEI	U1,[ASCIZ /B /]
05660		SKIPN	SIDE
05670		MOVEI	U1,[ASCIZ /W /]
05680		PUSHJ	PDP,PRINT
05690		AOS	U2
05700		POPJ	PDP,
05710
05720	PBK:	MOVEI	U1,[ASCIZ /BK/]
05730		SKIPN	SIDE
05740		MOVEI	U1,[ASCIZ /WK/]
05750		PUSHJ	PDP,PRINT
05760		AOS	U2
05770		POPJ	PDP,
05780
05790	PWM:	MOVEI	U1,[ASCIZ /W /]
05800		SKIPN	SIDE
05810		MOVEI	U1,[ASCIZ /B /]
05820		PUSHJ	PDP,PRINT
05830		AOS	U2
05840		POPJ	PDP,
05850
05860	PWK:	MOVEI	U1,[ASCIZ /WK/]
05870		SKIPN	SIDE
05880		MOVEI	U1,[ASCIZ /BK/]
05890		PUSHJ	PDP,PRINT
05900		AOS	U2
05910		POPJ	PDP,
05920
05930
05940		PAGE
05950
05960	;************************************************************
05970	;BOUT PRINTS THE CURRENT BOARD POSITION ON THE TTY.  ONE    *
05980	;MUST BEWARE WHEN ONE USES BOUT, FOR IT DESTROYS REGISTERS  *
05990	;U1, U2, AND U3 ON WEEKDAYS FROM 1 TO 4 PM.                 *
06000	;************************************************************
06010
06020	BOUT:	MOVE	U2,SI		;GET MOVE INDEX
06030		MOVE	U4,OA		;GET ACTIVE PIECES
06040	BOUT0:	MOVE	U5,OK		;& KINGS
06050		PUSHJ	PDP,TERPRI
06060		MOVEI	U3,1
06070		MOVEI	U1,[ASCIZ /B /]
06080		TRNN	U2,1		;BLACK TO PLAY?
06090		MOVEI	U1,[ASCIZ /W /]	;NO
06100		PUSHJ	PDP,PRINT
06110		LSH	U4,1
06120		LSH	U5,1
06130	BOUT1:	TLNN	U4,400000	;A PIECE THERE?
06140		AOJA	U3,.-3		;NO
06150		PUSHJ	PDP,INOUT	;YES, SO PRINT NUMBER
06160		MOVEI	X1,"K"
06170		TLNE	U5,400000	;IS PIECE A KING?
06180		PUSHJ	PDP,TYO		;YES, SO PRINT "K"
06190		LSH	U4,1
06200		LSH	U5,1		;SHIFT TO NEXT POSITION
06210		JUMPE	U4,BOUT2	;JUMP IF NO MORE PIECES
06220		MOVEI	X1,","		;THERE ARE MORE PIECES
06230		PUSHJ	PDP,TYO		;SO PRINT COMMA
06240		AOJA	U3,BOUT1
06250	BOUT2:	TLCE	U2,-1		;FIRST OR SECOND TIME HERE?
06260		JRST	BOUT3		;SECOND, SO EXIT
06270		TRC	U2,1
06280		MOVE	U4,OP
06290		JRST	BOUT0
06300	BOUT3:	PUSHJ	PDP,TERPRI
06310		PUSHJ	PDP,TERPRI
06320		POPJ	PDP,
06330
06340		PAGE
06350	;*************************************
06360	;LEGM PRINTS ALL POSSIBLE LEGAL MOVES.
06370	;*************************************
06380
06390	LEGM:	SETZM	FLAG
06400		MOVEI	U3,4
06410		SKIPE	U2,ORF
06420		PUSHJ	PDP,LEGM1
06430		MOVEI	U3,5
06440		SKIPE	U2,OLF
06450		PUSHJ	PDP,LEGM1
06460		MOVNI	U3,4
06470		SKIPE	U2,OLB
06480		PUSHJ	PDP,LEGM1
06490		MOVNI	U3,5
06500		SKIPE	U2,ORB
06510		PUSHJ	PDP,LEGM1
06520		PUSHJ	PDP,TERPRI
06530		POPJ	PDP,
06540	LEGM1:	SETZM	U4
06550		CAIL	U4,↑D35
06560		POPJ	PDP,
06570		ROT	U2,1
06580		AOS	U4
06590		TLNN	U2,400000
06600		JRST	LEGM1+1
06610		MOVEI	U1,[ASCIZ /,/]
06620		SKIPE	FLAG
06630		PUSHJ	PDP,PRINT
06640		MOVE	U1,U4
06650		PUSHJ	PDP,INOUT+1
06660		MOVEI	U1,[ASCIZ /-/]
06670		PUSHJ	PDP,PRINT
06680		MOVE	U1,U4
06690		ADD	U1,U3
06700		SKIPE	OJ
06710		ADD	U1,U3
06720		PUSHJ	PDP,INOUT+1
06730		AOS	FLAG
06740		JRST	LEGM1+1
06750
06760		PAGE
06770	;**********************************
06780	;SETLEG SETS UP INITIAL LEGAL MOVES
06790	;**********************************
06800
06810	SETLEG:	MOVEM	U1,X1S
06820		SETZB	X3,SIDE
06830		MOVE	A,SI
06840		TRNE	A,1
06850		AOS	SIDE
06860		MOVE	A,SIDE
06870		TRC	A,1
06880		MOVEM	A,COLOR
06890		MOVE	A,OA
06900		MOVE	P,OP
06910		MOVE	K,OK
06920		SETZM	OJ
06930		PUSHJ	PDP,LEGAL
06940		JRST	EOG
06950		SETOM	OJ
06960		MOVE	U3,PLRF
06970		MOVEM	U3,ORF
06980		MOVE	U4,PLLF
06990		MOVEM	U4,OLF
07000		MOVE	U5,PLLB
07010		MOVEM	U5,OLB
07020		MOVE	Q,PLRB
07030		MOVEM	Q,ORB
07040		MOVE	U1,X1S
07050		POPJ	PDP,
07060	EOG:	MOVEI	U1,[ASCIZ /NO LEGAL MOVES./]
07070		JRST	PRINT
07080
07090		PAGE
07100
07110	;******************
07120	;SET TREE FLIP-FLOP
07130	;******************
07140
07150	LPTREE:	PUSHJ	PDP,LPTFIX	;SEND TREES TO LPT
07160	TRESET:	MOVEI	U1,1
07170		XORM	U1,TREE
07180		POPJ	PDP,
07190
07200	;************************************************
07210	;INOUT CONVERTS AN INTERNAL NUMBER TO AN EXTERNAL
07220	;NUMBER AND PRINTS IT ON THE TTY
07230	;************************************************
07240
07250	INOUT:	MOVE	U1,U3
07260		CAIL	U1,↑D27
07270		SOS	U1
07280		CAIL	U1,↑D18
07290		SOS	U1
07300		CAIL	U1,↑D9
07310		SOS	U1
07320		PUSHJ	PDP,NUMOUT
07330		POPJ	PDP,
07340
07350	;********************************************
07360	;PLAYBS WILL HAVE THE MACHINE PLAY BOTH SIDES
07370	;********************************************
07380
07390	PLAYBS:	PUSHJ	PDP,EOL
07400		SETOM	U1
07410		MOVEM	U1,STOP
07420		PUSHJ	PDP,SCAN
07430		MOVE	U1,SI
07440		SETZM	SIDE
07450		TRNN	U1,1
07460		AOS	SIDE
07470		AOS	FSTCR
07480		MOVE	A,OA
07490		MOVE	P,OP
07500		MOVE	K,OK
07510		PUSHJ	PDP,MKPLAY	;GO PLAY CHECKERS
07520		CALLI	U1,20
07530		CAIN	U1,012345
07540		POPJ	PDP,
07550		TTYUUO	2,U1
07560		JRST	.+2
07570		JRST	INTERP
07580		MOVE	U1,SI
07590		CAME	U1,STOP
07600		JRST	PBS
07610		MOVEI	U1,[034160703400]	;PRINT 4 BELLS
07620		PUSHJ	PDP,PRINT
07630		POPJ	PDP,		;TIME TO STOP
07640	PBS:	MOVEI	U1,1
07650		XORM	U1,SIDE
07660		JRST	PLAYBS+10	;NOW PLAY OTHERSIDE
07670
07680		PAGE
07690
07700	D:	PUSHJ	PDP,SCAN	;GET NEXT CHARACTER
07710		SETOM	DWFLAG
07720		CAIN	U1,"+"		;IS IT A '+'?
07730		AOS	DEPTH		;YES
07740		CAIN	U1,"-"		;IS IT A '-'?
07750		SOS	DEPTH		;YES
07760		TLZE	U1,400000	;IS IT A NUMBER?
07770		MOVEM	U1,DEPTH	;YES
07780		POPJ	PDP,
07790
07800	W:	PUSHJ	PDP,SCAN	;GET NEXT CHARACTER
07810		SETOM	DWFLAG
07820		CAIN	U1,"+"		;IS IT A '+'?
07830		AOS	WIDTH		;YES
07840		CAIN	U1,"-"		;IS IT A '-'?
07850		SOS	WIDTH
07860		TLZE	U1,400000	;IS IT A NUMBER?
07870		MOVEM	U1,WIDTH	;YES
07880		POPJ	PDP,
07890
07900	SETPAR:	PUSHJ	PDP,TERPRI
07910		MOVEI	U1,[ASCIZ /DEPTH = /]
07920		PUSHJ	PDP,PRINT
07930		PUSHJ	PDP,DECIN
07940		MOVEM	U1,DEPTH
07950		MOVEI	U1,[ASCIZ /TIME = /]
07960		PUSHJ	PDP,PRINT
07970		PUSHJ	PDP,DECIN
07980		MOVEM	U1,TIMEX
07990		MOVEI	U1,[ASCIZ /WIDTH = /]
08000		PUSHJ	PDP,PRINT
08010		PUSHJ	PDP,DECIN
08020		MOVEM	U1,WIDTH
08030		MOVEI	U1,[ASCIZ /TAPER = /]
08040		PUSHJ	PDP,PRINT
08050		PUSHJ	PDP,DECIN
08060		MOVEM	U1,TAPER
08070		MOVEI	U1,[ASCIZ /BLACK = /]
08080		PUSHJ	PDP,PRINT
08090		PUSHJ	PDP,OCTIN
08100		MOVEM	U1,BTERMS
08110		MOVEI	U1,[ASCIZ /WHITE = /]
08120		PUSHJ	PDP,PRINT
08130		PUSHJ	PDP,OCTIN
08140		MOVEM	U1,WTERMS
08142		MOVEI	U1,[ASCIZ /REPLY = /]
08143		PUSHJ	PDP,PRINT
08144		PUSHJ	PDP,DECIN
08145		MOVEM	U1,REPLYD
08150		MOVEI	U1,[ASCIZ /FLIT = /]
08160		PUSHJ	PDP,PRINT
08170		PUSHJ	PDP,DECIN
08190		MOVEM	U1,PLAUSD
08200		MOVEI	U1,[ASCIZ /STEM = /]
08210		PUSHJ	PDP,PRINT
08220		PUSHJ	PDP,DECIN
08240		MOVEM	U1,STEMD
08250		MOVEI	U1,[ASCIZ /PLAY = /]
08260		PUSHJ	PDP,PRINT
08270		PUSHJ	PDP,DECIN
08290		MOVEM	U1,PLAYD
08300		PUSHJ	PDP,TERPRI
08310		POPJ	PDP,
08320
     

00010	TELPAR:	PUSHJ	PDP,TERPRI
00020		MOVEI	U1,[ASCIZ /DEPTH = /]
00030		PUSHJ	PDP,PRINT
00040		MOVE	U1,DEPTH
00050		PUSHJ	PDP,NUMOUT
00060		PUSHJ	PDP,TERPRI
00070		MOVEI	U1,[ASCIZ /TIME = /]
00080		PUSHJ	PDP,PRINT
00090		MOVE	U1,TIMEX
00100		PUSHJ	PDP,NUMOUT
00110		PUSHJ	PDP,TERPRI
00120		MOVEI	U1,[ASCIZ /WIDTH = /]
00130		PUSHJ	PDP,PRINT
00140		MOVE	U1,WIDTH
00150		PUSHJ	PDP,NUMOUT
00160		PUSHJ	PDP,TERPRI
00170		MOVEI	U1,[ASCIZ /TAPER = /]
00180		PUSHJ	PDP,PRINT
00190		MOVE	U1,TAPER
00200		PUSHJ	PDP,NUMOUT
00210		PUSHJ	PDP,TERPRI
00220		MOVEI	U1,[ASCIZ /BLACK = /]
00230		PUSHJ	PDP,PRINT
00240		MOVE	U1,BTERMS
00250		PUSHJ	PDP,OCTOUT
00260		PUSHJ	PDP,TERPRI
00270		MOVEI	U1,[ASCIZ /WHITE = /]
00280		PUSHJ	PDP,PRINT
00290		MOVE	U1,WTERMS
00300		PUSHJ	PDP,OCTOUT
00310		PUSHJ	PDP,TERPRI
00312		MOVEI	U1,[ASCIZ /REPLY = /]
00313		PUSHJ	PDP,PRINT
00314		MOVE	U1,REPLYD
00315		PUSHJ	PDP,NUMOUT
00316		PUSHJ	PDP,TERPRI
00320		MOVEI	U1,[ASCIZ /FLIT = /]
00330		PUSHJ	PDP,PRINT
00340		MOVE	U1,PLAUSD
00360		PUSHJ	PDP,NUMOUT
00370		PUSHJ	PDP,TERPRI
00380		MOVEI	U1,[ASCIZ /STEM = /]
00390		PUSHJ	PDP,PRINT
00400		MOVE	U1,STEMD
00420		PUSHJ	PDP,NUMOUT
00430		PUSHJ	PDP,TERPRI
00440		MOVEI	U1,[ASCIZ /PLAY = /]
00450		PUSHJ	PDP,PRINT
00460		MOVE	U1,PLAYD
00480		PUSHJ	PDP,NUMOUT
00490		PUSHJ	PDP,TERPRI
00500		POPJ	PDP,
00510
00511	REPLYD:	5
00520	PLAUSD:	2
00530	STEMD:	1
00540	PLAYD:	1
00550	PLDPT:	0
00560
00570
00580		PAGE
00590
00600	CSFLAG:	SOS	HEADFL
00610		SETCMM	SFLAG		;SFLAG IS THE SCORE PRINT OUT FLIP-FLOP
00620		POPJ	PDP,
00630
00640	TELLDW:	MOVEI	U1,[ASCIZ /	DEPTH=/]
00650		PUSHJ	PDP,PRINT
00660		MOVE	U1,DEPTH
00670		PUSHJ	PDP,NUMOUT
00680		MOVEI	U1,[ASCIZ /, WIDTH=/]
00690		PUSHJ	PDP,PRINT
00700		MOVE	U1,WIDTH
00710		PUSHJ	PDP,NUMOUT
00720		SETZM	DWFLAG
00730		POPJ	PDP,
00740	TIME:	Z
00750	RUNT:	-1
00760		MOVE	U1,TIME
00770		JRST	RJOUT
00780
00790	CRUNT:	SOS	HEADFL
00800		SETCMM	RUNT
00810		POPJ	PDP,
00820
00830	CDIFF:	SETCMM	DIFF
00840		POPJ	PDP,
00850	DIFFT:	Z
00860	DIFF:	Z
00870	TOTAL:	Z
00880
00890	CTOTAL:	SETCMM	TOTAL
00900		POPJ	PDP,
00910
00920
00930	TELLS:	MOVEI	U1,[ASCIZ /       BKMOVE  /]
00940		SKIPN	COUNT
00950		JRST	.+10
00960		MOVE	U1,SCORE
00970		MOVEI	X1," "
00980		CAMLE	U1,LOSE
00990		PUSHJ	PDP,TYO
01000		CAMLE	U1,LOSE
01010		JRST	TELLS2
01020		MOVEI	U1,[ASCIZ /       FORCED  /]
01030		PUSHJ	PDP,PRINT
01040		POPJ	PDP,
01050	TELLS2:	MOVE	U1,SCORE
01060		CAMGE	U1,GOOD
01070		JRST	.+10
01080		MOVNS	U1
01090		ADD	U1,WIN
01100		ADDI	U1,1
01110		PUSHJ	PDP,SOUT2
01120		MOVEI	U1,[ASCIZ / MOVE WIN./]
01130		PUSHJ	PDP,PRINT
01140		POPJ	PDP,
01150		ASH	U1,-5
01160		ADDI	U1,200		;CONTERACT NEG. EVA
01170		MOVEM	U1,U1S#
01180		ASH	U1,-10
01190		PUSHJ	PDP,RJOUT	;PIECE COUNT
01200		MOVE	U1,U1S
01210		ANDI	U1,377
01220		SUBI	U1,200
01230		PUSHJ	PDP,RJOUT	;EVA PORTION
01240		POPJ	PDP,
01250
01260	NUMIN:	PUSHJ	PDP,SCAN		;SCAN NEXT SYMBOL
01270		JUMPGE	U1,NUMIN		;JUMP IF NOT A NUMBER.
01280		HRRZ	U2,U1			;GET VALUE.
01290		PUSHJ	PDP,OUTIN		;FIX THE NUMBER
01300		POPJ	PDP,			;TRA 1,4
01310
     

00010
00020	FSTCR:	0
00030	CRFST:	SKIPE	FSTCR
00040		POPJ	PDP,
00050		SETZM	SIDE
00060		MOVE	A,OA
00070		MOVE	P,OP
00080		MOVE	K,OK
00090		PUSHJ	PDP,TERPRI
00100		PUSHJ	PDP,TERPRI
00110		PUSHJ	PDP,PDP16
00120		MOVEI	U1,[ASCIZ / WILL PLAY BLACK./]
00130		MOVE	X1,SI
00140		TRNN	X1,1
00150		AOS	SIDE
00160		TRNN	X1,1
00170		MOVEI	U1,[ASCIZ / WILL PLAY WHITE./]
00180		PUSHJ	PDP,PRINT
00190		PUSHJ	PDP,SAVBD
00200		PUSHJ	PDP,TERPRI
00210		PUSHJ	PDP,TERPRI
00220		PUSHJ	PDP,TERPRI
00230		AOS	FSTCR
00240		JRST	MKPLAY
00250
     

00010	MUP:	MOVE	A,MA-10(X1)
00020		SKIPN	A
00030		POPJ	PDP,
00040		MOVE	P,MP-10(X1)
00050		MOVE	K,MK-10(X1)
00060		MOVEM	A,MOVAA		;TREE DATA
00070		MOVE	U1,[POINT 4,MJ]
00080		MOVEM	U1,MJBP		;INIT BYTE POINTER
00090		MOVE	U1,[POINT 6,MJBP,5]
00100		MOVEM	U1,BPBP		;INIT BYTE POINTER'S BYTE POINTER
00110		SKIPE	U1,MRF-10(X1)
00120		JRST	RF
00130		SKIPE	U1,MLF-10(X1)
00140		JRST	LF
00150		SKIPE	U1,MLB-10(X1)
00160		JRST	LB
00170		SKIPN	U1,MRB-10(X1)
00180		POPJ	PDP,		;NO MOVE RETURN
00190		MOVEM	U1,SAVE
00200		HRLI	I,MRB-10(X1)
00210		HRRI	I,4300		;RB FLAG BIT IN I
00220		SUBI	U1,1
00230		ANDM	U1,MRB-10(X1)	;CORRECTED RB WORD WITH MOVE BIT GONE
00240		ADDI	U1,1
00250		XOR	U1,MRB-10(X1)	;MOVE BIT ONLY IN U1
00260		MOVEI	U2,5		;MAGIC NUMBER IN U2
00270		JRST	UPDATE
00280	RF:	MOVEM	U1,SAVE
00290		HRLI	I,MRF-10(X1)
00300		HRRI	I,700		;RF FLAG BIT IN I
00310		SUBI	U1,1
00320		ANDM	U1,MRF-10(X1)	;CORRECTED RF WORD WITH MOVE BIT GONE
00330		ADDI	U1,1
00340		XOR	U1,MRF-10(X1)	;MOVE BIT ONLY IN U1
00350		MOVEI	U2,-4		;MAGIC NUMBER IN U2
00360		JRST	UPDATE
00370	LF:	MOVEM	U1,SAVE
00380		HRLI	I,MLF-10(X1)
00390		HRRI	I,1300		;LF FLAG BIT IN I
00400		SUBI	U1,1
00410		ANDM	U1,MLF-10(X1)	;CORRECTED LF WORD WITH MOVE BIT GONE
00420		ADDI	U1,1
00430		XOR	U1,MLF-10(X1)	;MOVE BIT ONLY IN U1
00440		MOVEI	U2,-5		;MAGIC NUMBER IN U2
00450		JRST	UPDATE
00460	LB:	MOVEM	U1,SAVE
00470		HRLI	I,MLB-10(X1)
00480		HRRI	I,2300		;LB FLAG BIT IN I
00490		SUBI	U1,1
00500		ANDM	U1,MLB-10(X1)	;CORRECTED LB WORD WITH MOVE BIT GONE
00510		ADDI	U1,1
00520		XOR	U1,MLB-10(X1)	;MOVE BIT ONLY IN U1
00530		MOVEI	U2,4		;MAGIC NUMBER IN U2
00540		JRST	UPDATE
     

00010	OVUP:	MOVE	A,OVA(X1)
00020		SKIPN	A
00030		POPJ	PDP,
00040		MOVE	P,OVP(X1)
00050		MOVE	K,OVK(X1)
00060		MOVEM	A,MOVAA		;TREE DATA
00070		MOVE	U1,[POINT 4,MJ]
00080		MOVEM	U1,MJBP		;INIT BYTE POINTER
00090		MOVE	U1,[POINT 6,MJBP,5]
00100		MOVEM	U1,BPBP		;INIT BYTE POINTER'S BYTE POINTER
00110		SKIPE	U1,OVRF(X1)
00120		JRST	OVUPRF
00130		SKIPE	U1,OVLF(X1)
00140		JRST	OVUPLF
00150		SKIPE	U1,OVLB(X1)
00160		JRST	OVUPLB
00170		SKIPN	U1,OVRB(X1)
00180		POPJ	PDP,		;NO MOVE RETURN
00190		MOVEM	U1,SAVE
00200		HRLI	I,OVRB(X1)
00210		HRRI	I,4300		;RB FLAG BIT IN I
00220		SUBI	U1,1
00230		ANDM	U1,OVRB(X1)	;CORRECTED RB WORD WITH MOVE BIT GONE
00240		ADDI	U1,1
00250		XOR	U1,OVRB(X1)	;MOVE BIT ONLY IN U1
00260		MOVEI	U2,5		;MAGIC NUMBER IN U2
00270		JRST	UPDATE
00280	OVUPRF:	MOVEM	U1,SAVE
00290		HRLI	I,OVRF(X1)
00300		HRRI	I,700		;RF FLAG BIT IN I
00310		SUBI	U1,1
00320		ANDM	U1,OVRF(X1)	;CORRECTED RF WORD WITH MOVE BIT GONE
00330		ADDI	U1,1
00340		XOR	U1,OVRF(X1)	;MOVE BIT ONLY IN U1
00350		MOVEI	U2,-4		;MAGIC NUMBER IN U2
00360		JRST	UPDATE
00370	OVUPLF:	MOVEM	U1,SAVE
00380		HRLI	I,OVLF(X1)
00390		HRRI	I,1300		;LF FLAG BIT IN I
00400		SUBI	U1,1
00410		ANDM	U1,OVLF(X1)	;CORRECTED LF WORD WITH MOVE BIT GONE
00420		ADDI	U1,1
00430		XOR	U1,OVLF(X1)	;MOVE BIT ONLY IN U1
00440		MOVEI	U2,-5		;MAGIC NUMBER IN U2
00450		JRST	UPDATE
00460	OVUPLB:	MOVEM	U1,SAVE
00470		HRLI	I,OVLB(X1)
00480		HRRI	I,2300		;LB FLAG BIT IN I
00490		SUBI	U1,1
00500		ANDM	U1,OVLB(X1)	;CORRECTED LB WORD WITH MOVE BIT GONE
00510		ADDI	U1,1
00520		XOR	U1,OVLB(X1)	;MOVE BIT ONLY IN U1
00530		MOVEI	U2,4		;MAGIC NUMBER IN U2
00540		JRST	UPDATE
     

00010		SUBTTL	MACROS FOR SIGNATURE TABLES
00020
00030		DEFINE	MAC1	(S)	<;OUTER MACRO
00040			SETZ	U1,
00070			MAC2	\<2*S-1>
00074			ASH	U2,11	;USE 9 BITS FOR EACH TABLE
00078			ADDM	U2,U2SAV
00080			IMULI	U1,13
00090			MAC2	\<2*S>
00094			ADDM	U2,U2SAV
00100			ADD	U5,SIGT2'S(U1)>
00110
00120		DEFINE	MAC2	(SC)	<;CENTRAL MACRO
00130			MAC3	1
00140			MOVE	U2,Q
00150			IMULI	U2,3
00152		MAC3	1
00154		ADD	U2,Q
00156		IMULI	U2,3
00160			MAC3	1
00170			ADD	U2,Q
00180			IMULI	U2,5
00190			MAC3	2
00200			ADD	U2,Q
00210			ADD	U1,SIGT1'SC(U2)>
00220
00230		DEFINE	MAC3	(C)	<;INNER MACRO
00240			SETZB	Q,P
00250			LSHC	Q,4
00260			LSHC	P,4
00270			SUB	Q,P
00280			CAILE	Q,C
00290			MOVEI	Q,C
00300			CAMGE	Q,NEG+C
00310			MOVNI	Q,C>
00320
00330	NEG:	0		;NEGATION TABLE
00340		-1
00350		-2
00360		-3
00370		-4
00380		-5
00390		-6
00400		-7
00410		-10
00500
00510	INTERN	DATA
00520	EXTERN	NUM2,NUM3
00530	
00540	DATA:	MOVE	X4,PHASE
00550		IMULI	X4,↑D16
00554		MOVEI	U1,[ASCIZ /				TERM DATA FOR PHASE /]
00558		PUSHJ	PDP,PRINT
00562		MOVE	U1,PHASE
00566		PUSHJ	PDP,NUMOUT
00568		PUSHJ	PDP,TERPRI
00570		REPEAT	4,<	MOVEI	U1,[ASCIZ /    		        /]
00580		PUSHJ	PDP,PRINT
00590		REPEAT	4,<	XCT	TLIST(X4)
00600		ADDI	X4,4
00604		PUSHJ	PDP,PRINT
00608		MOVEI	U1,[ASCIZ /  /]
00610		PUSHJ	PDP,PRINT>
00620		SUBI	X4,↑D15
00630		PUSHJ	PDP,TERPRI>
00640		SETZ	X4,
00650		MOVEI	U1,[ASCIZ /TRUNK	  PIECE   EVAL/]
00660		PUSHJ	PDP,PRINT
00690		PUSHJ	PDP,TERPRI
00700	DATA2:	SKIPN	U2,MOVES(X4)
00710		JRST	TERPRI
00720		HLRZ	U1,U2
00730		PUSHJ	PDP,NUMOUT
00740		MOVEI	U1,[ASCIZ /-/]
00750		PUSHJ	PDP,PRINT
00760		HRRZ	U1,U2
00770		PUSHJ	PDP,NUMOUT
00780		MOVEI	U1,[ASCIZ /	/]
00790		PUSHJ	PDP,PRINT
00800		MOVE	U1,FLZZ(X4)
00810		PUSHJ	PDP,TELLS2+1
00820		MOVEI	U1,[ASCIZ /	/]
00830		PUSHJ	PDP,PRINT
00840		MOVEI	U3,4
00850	DATA3:	SETZ	U1,
00860		MOVE	X2,FLZZZ(X4)
00870		LSHC	U1,11
00880		MOVEM	X2,FLZZZ(X4)
00890		IDIVI	U1,5
00892		MOVEM	X2,X2SSS#
00894		IDIVI	U1,3
00900		MOVEM	X2,X2SS
00910		IDIVI	U1,3
00920		MOVEM	X2,X2S
00930		SUBI	U1,1
00940		PUSHJ	PDP,NUM1
00950		MOVE	U1,X2S
00960		SUBI	U1,1
00970		PUSHJ	PDP,NUM1
00980		MOVE	U1,X2SS
00982		SUBI	U1,1
00984		PUSHJ	PDP,NUM1
00986		MOVE	U1,X2SSS
00990		SUBI	U1,2
01000		PUSHJ	PDP,NUM1
01010		SOJLE	U3,.+4
01020		MOVEI	U1,[ASCIZ /  /]
01030		PUSHJ	PDP,PRINT
01040		JRST	DATA3
01050		PUSHJ	PDP,TERPRI
01060		AOJA	X4,DATA2
01070	
01080	U2SAV:	Z		;TEMP SAVE OF U2
01090	ZZZ:	BLOCK	20	;TERM SCORE IN PL
01100	BZZ:	BLOCK	20
01110	FLZZZ:	BLOCK	20
01120	
01130	NUM1:	JUMPL	U1,NUM2
01140		MOVEI	X1," "
01150		PUSHJ	PDP,TYO
01160		JRST	NUM3
01170	
     

00010	EVA:	MOVEM	X1,CFZ1	;SAVE X1
00020		PUSHJ	PDP,PCCNT		;COUNT PIECES
00030		MOVE	U4,CFLAG	;SEE WHAT KIND OF EVALUATION TO DO
00040		JUMPE	U4,CFA1
00050	LEV1:	MOVE	A,EEB(X3)
00060		MOVE	K,EEB-1(X3)
00070		SETZB	U5,U2SAV
00080		MAC1	1
00090		IMULI	U5,17
00095		HRLZS	U2SAV
00100		MOVE	A,EEB2(X3)
00110		MOVE	K,EEB2-1(X3)
00120		MAC1	2
00130		MOVE	Z,SIGTF(U5)	;GET FINAL SCORE
00140	CFC:	ADD	Z,U3	;ADD IN PIECE-COUNT TO SCORE
00150		MOVE	X1,PLY(X2)	;PLY AT WHICH TIP WAS ENTERED
00160		ADD	X1,X3		;PLUS PLY IN TIP GIVES TRUE PLY
00170		SUBI	X1,40
00180		ASH	Z,5
00190		SKIPL	Z
00200		MOVNS	X1
00210		ADD	Z,X1		;ADD PLY TO SCORE
00220		MOVE	X1,CFZ1	;RESTORE X1 FOR RETURN
00230		POPJ	PDP,	;RETURN--SCORE IS LEFT IN Z
00240	CFA1:	MOVE	Z,U3	;THIS IS ONLY EXECUTED IF CFLAG=0
00250		MOVE	X1,PLY(X2)
00260		ADD	X1,X3
00270		SUBI	X1,77
00280		SKIPL	Z
00290		MOVNS	X1
00300		ADD	Z,X1
00310	CFA3:	MOVE	X1,CFZ1	;RESTORE X1 FOR RETURN
00320		POPJ	PDP,	;RETURN--SCORE IS LEFT IN Z
00330	
00340	PHASFI:	MOVE	U1,SIG0(U5)
00350		CAMN	U1,SIGN0
00360		POPJ	PDP,		;CORRECT SIG VALUES ALREADY IN
00370		MOVEM	U1,SIGN0
00380		INIT	7,17
00390		SIXBIT	/DSK/
00400		Z
00410		JRST	DSKERR
00411		MOVE	U1,[SIXBIT /DAT/]
00412		MOVEM	U1,SIGN0+1
00413		MOVE	U1,[055000000000]
00414		MOVEM	U1,SIGN0+2
00415		MOVE	U1,[SIXBIT /  2ALS/]
00416		MOVEM	U1,SIGN0+3
00420		LOOKUP	7,SIGN0
00430		JRST	DSKERR
00440		INPUT	7,SIGT0
00450		RELEAS	7,
00460		POPJ PDP,
00470	
00480	
00490	DSKERR:	MOVEI	U1,[ASCIZ /TRY AGAIN/]
00500		PUSHJ	PDP,PRINT
00510		PUSHJ	PDP,TERPRI
00520		POPJ	PDP,
00530	
00540	SIGSIZ=1764		;MUST AGREE WITH CKL
00550	
00560	SIGT0:	IOWD	SIGSIZ,LABEL
00570		Z
00580	
00590	SIGN0:	SIXBIT	/Z/		;Z TO INSURE FILLING FIRST TIME
00600		SIXBIT	/DAT/
00610		055000000000
00620		SIXBIT	/  2ALS/
00630	
00640	SIG0:	SIXBIT	/SIGT0/
00650		SIXBIT	/SIGT1/
00660		SIXBIT	/SIGT2/
00670		SIXBIT	/SIGT3/
00680	
00690		SUBTTL	DATA FOR EVALUATION -- C. FARRELL
00700		PAGE
00710	
00720	CFZ1:	Z	;TEMPORARY STORAGE
00730	CFZ2:	Z
00740	CFZ3:	Z
00750	CFZ4:	Z
00760	CFZ5:	Z
00770	CFZ10:	Z	;BACKUP LOCATION FOR PASK
00780	CFZ11:	Z	;BACKUP LOCATION FOR ACTK
00790	CEMPTY:	Z	;TEMPORARY LOCATION FOR EMPTY, ET.AL.
00800	
00810	LABEL:	BLOCK	5
00820	EVAL11:	BLOCK	103	;SIGNATURE TABLES
00830	SIGT11:	BLOCK	104	;LABEL IS CENTERED IN TABLE TO ALLOW NEGATIVE SUBSCRIPTS
00840	EVAL12:	BLOCK	103
00850	SIGT12:	BLOCK	104
00860	EVAL13:	BLOCK	103
00870	SIGT13:	BLOCK	104
00880	EVAL14:	BLOCK	103
00890	SIGT14:	BLOCK	104
00940	EVAL21:	BLOCK	74
00950	SIGT21:	BLOCK	75
00960	EVAL22:	BLOCK	74
00970	SIGT22:	BLOCK	75
00980	EVALF:	BLOCK	160
00990	SIGTF:	BLOCK	161
01000	TTABLE:	BLOCK	22		;SPACE FOR T VALUES
01010	
01020	
01030	
01040	
01050	BLOWUP=10		;MUST CORRESPOND WITH VALUE IN CKL
01060	INPSIZ=↑D1020		;DIVISABLE BY 6 AND <1024
01070	
01080	FINMOV:	PUSHJ	PDP,FINDFI	;GET FILE NAME
01090		PUSHJ	PDP,GETFIL	;AND GET NEW FILE
01100	FINMO2:	PUSHJ	PDP,FINDX1	;GET LINE ENTRY
01110		JRST	FINMO3		;NOT FOUND BUT WHY
01120	FOUNDM:	MOVE	X5,INPA(X1)
01130		PUSHJ	PDP,EXBITS
01134		SKIPN	X5
01138		POPJ	PDP,		;IGNORE 0-0 BOARDS
01140		MOVEM	X5,X4
01150		JUMPE	U4,FOUNDN	;NO KING CASE
01160		MOVE	X5,INPP(X1)
01170		PUSHJ	PDP,EXBITS
01180		MOVE	Z,X5
01190		MOVE	X5,INPK(X1)
01200		PUSHJ	PDP,EXBITS
01210		LSH	Z,4
01220		IORB	X5,Z
01230		JUMPE	X5,CHOICE	;DRAW MOVE
01234		SKIPE	WONFLG		;HAVE WE PRINTED MESSAGE
01238		JRST	CHOICE		;YES
01239		SETOM	WONFLG
01240		TRNE	Z,1
01250		JRST	BWINMV
01260		MOVEI	U1,[ASCIZ /YOU HAVE A POSSIBLE WIN IN /]
01270		PUSHJ	PDP,PRINT
01280		MOVE	U1,Z
01290		PUSHJ	PDP,NUMOUT
01300		MOVEI	U1,[ASCIZ / MOVES! GOOD LUCK./]
01310		PUSHJ	PDP,PRINT
01320		PUSHJ	PDP,TERPRI
01330		JRST	CHOICE
01340	BWINMV:	MOVEI	U1,[ASCIZ /THE PDP-10 MAY WIN IN /]
01350		PUSHJ	PDP,PRINT
01360		MOVE	U1,Z
01370		PUSHJ	PDP,NUMOUT
01380		MOVEI	U1,[ASCIZ / MOVES./]
01390		PUSHJ	PDP,TERPRI
01400		JRST	CHOICE
01410	
01420	FOUNDN:	MOVE	X5,INPP(X1)
01430		PUSHJ	PDP,EXBITS
01440		JUMPE	X5,CHOICE
01450		CALL	U1,[SIXBIT /MSTIME/]	;FLIT A COIN
01460		TRNN	U1,1
01470		MOVEM	X5,X4
01480	CHOICE:	SKIPN	COLOR
01485		JRST	.+10
01490		MOVEI	U1,1
01495		CAMN	X4,X4TAB(U1)
01500		JRST	.+4
01505		CAIGE	U1,17
01510		AOJA	U1,.-3
01515		POPJ	PDP,		;ERROR EXIT
01520		MOVE	X4,U1
01530		SUBI	X4,1		;COUNT FROM ZERO
01540		MOVEM	X4,MOVX		;REPORT MOVE
01550		POP	PDP,(PDP)	;BYPASS FIRST RETURN
01560		SETZM	COUNT		;BOOK MOVE SIGNAL
01570		JRST	EXIT1
01580	
01590	FINMO3:	CAIGE	X1,INPSIZ	;IS THIS THE RIGHT FILE
01600		POPJ	PDP,		;YES BUT NOT THERE
01610		MOVE	U1,DSKBKM	;NO SO TRY NEXT FILE
01620		SUB	U1,[000100000000]
01630		PUSHJ	PDP,GETFIA
01640		JRST	FINMO2		;THIS MAX BE IT
01650	
01660	EXBITS:	LSHC	X5,-11		;EXTRACT GUARD BITS
01670		LSH	X5,-10
01680		LSHC	X5,-1
01690		LSH	X5,-10
01700		LSHC	X5,-1
01710		LSH	X5,-10
01720		LSHC	X5,3
01730		POPJ	PDP,
01740	
01750	DSKBKM:	Z
01760		SIXBIT	/CHK/
01770		055000000000
01780		SIXBIT	/  3ALS/
01790	
01800	BKMIN:	IOWD	INPSIZ,INPA
01810		Z
01820	
01830	INPA:	BLOCK	INPSIZ
01840	INPP=INPA+1
01850	INPK=INPA+2
01860		Z
01870	BKMOVE:	Z
01880	BOOKA:
01890	BOOKP:
01900	BOOKK:
01910	BOOKM:
01920	BOOKI:
01930	FILEIN:	Z
01940	
01950	GETFIL:	LDB	U1,[POINT 5,U2,29]
01960		LDB	U3,[POINT 5,U2,35]
01970		MOVE	U1,CRIP(U1)
01980		LSH	U1,14
01990		IOR	U1,CRIP(U3)
02000		TRNN	U2,10000	;TEST K BIT
02010		IOR	U1,[SIXBIT /MA/]
02020		TRNE	U2,10000	;TEST AGAIN
02030		IOR	U1,[SIXBIT /KA/]	;KING BOARDS
02040		SETZ	X5,
02050		SKIPE	U5,WHERE(X5)
02060		JRST	.+3
02070		POP	PDP,(PDP)
02080		POPJ	PDP,
02090		CAMN	U2,U5		;CHECK MAJOR NAME
02100		JRST	.+3
02110		ADDI	X5,BLOWUP+1
02120		JRST	.-7
02130		SKIPN	COLOR
02140		JRST	SAV0
02150		MOVEM	U1,U1S#
02160		PUSHJ	PDP,REVERA
02170		MOVEM	Z,U2
02180		PUSHJ	PDP,REVERP
02190		MOVEM	Z,U3
02200		PUSHJ	PDP,REVERK
02210		MOVEM	Z,U4
02220		MOVE	U1,U1S
02230		JRST	.+4
02240	SAV0:	MOVEM	A,U2
02250		MOVEM	P,U3
02260		MOVEM	K,U4
02270		MOVEI	U5,10		;TO COUNT MINORS
02280		CAML	U2,WHERE+1(X5)
02290		JRST	GETFIA
02300		ADDI	X5,1
02310		ADD	U1,[000100000000]
02320		SOJG	U5,.-4
02330		POP	PDP,(PDP)	;NOT FOUND
02340		POPJ	PDP,
02350	
02360	GETFIA:	CAMN	U1,DSKBKM	;COMPARE WITH OLD VALUE
02370		POPJ	PDP,		;FILE ALREADY IN
02380		MOVE	U5,DSKBKM
02390		MOVEM	U5,DSKBK2#	;SAVE TEMPORARILY
02400		MOVEM	U1,DSKBKM
02410		MOVE	U1,[SIXBIT /CHK/]
02420		MOVEM	U1,DSKBKM+1
02430		MOVE	U1,[055000000000]
02440		MOVEM	U1,DSKBKM+2
02450		MOVE	U1,[SIXBIT /  3ALS/]
02460		MOVEM	U1,DSKBKM+3
02470		INIT	12,17
02480		SIXBIT	/DSK/
02490		Z
02500		HALT
02510		LOOKUP	12,DSKBKM
02520		JRST	.+4		;ERROR
02530		INPUT	12,BKMIN
02540		RELEAS	12,
02550		POPJ	PDP,
02560	
02570		MOVE	U1,DSKBK2
02580		MOVEM	U1,DSKBKM	;RESTORE FORMER VALUE
02590		POP	PDP,(PDP)
02600		POPJ	PDP,		;NOT FOUND
02610	
02620	MESS:	ASCIZ	/
02630	CHECKERS. BLACK PIECES GO ON LOW NUMBERS AND BLACK PLAYS FIRST. ENTER
02640	MOVE (EXAMPLE 11-15) GIVE CR AND WAIT FOR REPLY.  CR ONLY CAUSES PDP
02650	TO PLAY BLACK.  JUMPS MUST BE TAKEN.   TYPE I FOR MORE INFORMATION.
02660	/
02670		END